Just wanted to update with an experience report. I wound up writing a native module myself, since the json-to-elm project doesn't have a published package and the native module was not in the Elm 0.17 format. (It also returns an empty JSON object if there is a parse exception, rather than a Result, which I need.)
Everything worked nicely once I figured out the format for writing native modules (which I understand is subject to change). On Fri, Jul 29, 2016 at 4:56 PM, Paul Blair <[email protected]> wrote: > Thanks, Duane; that looks promising. I'll try that out. > > > On Jul 29, 2016, 4:54 PM -0400, Duane Johnson <[email protected]>, > wrote: > > I wonder if the `json-to-elm` project includes what you're looking for. I > see a Types.elm file that includes a toValue function: > > toValue : String -> Json.Value >> toValue = >> Native.Types.toValue >> > > And in the Native.Types module, a definition of toValue that uses native > javascript: > > var toValue = function(text){ >> try { >> return JSON.parse(text); >> } catch (e) { >> return {}; >> } >> }; >> > > > > > On Fri, Jul 29, 2016 at 2:33 PM, Paul Blair <[email protected]> wrote: > >> Duane, the dictionary has string keys; its values are just values of a >> union type--they are not modules in themselves, but just tags that the case >> statement can key on in order to decide on which module to send the message >> to. >> >> On the second point, the top-level component knows enough about the >> incoming message to get the value from the message_type key. The type of >> the data field is opaque to the top-level; the top-level just sees it as >> Json.Value. This does in fact work; it's just hard to test. >> >> >> On Fri, Jul 29, 2016 at 3:47 PM, Duane Johnson <[email protected]> >> wrote: >> >>> >>> On Fri, Jul 29, 2016 at 12:52 PM, Paul Blair <[email protected]> wrote: >>> >>>> toMessage : FromServer -> Message >>>> toMessage incoming = >>>> case Dict.get incoming.message_type componentDictionary of >>>> Just MyInnerComponent -> >>>> InnerComponentModule.toMessage incoming |> >>>> MyInnerComponentMessageWrapper >>>> Nothing -> >>>> ... >>>> >>> >>> >>> I'm still learning Elm, so forgive that this is not necessarily going to >>> be expert advice :) >>> >>> My first question is, what is the type of `componentDictionary`? It >>> looks to me like it has `String` type keys, but then I don't understand >>> what the type signature of the value is. `Maybe type`? How can you match on >>> `Just MyInnerComponent`? >>> >>> Second question: it seems like the top-level component *must* know >>> something about the messages in order to route to subcomponents. Can you >>> include a list of json keys in that routing information, so that you can >>> pass a narrower scope of data into each subcomponent? It seems like if you >>> can, that would make your testing story a lot easier. >>> >>> Duane >>> >>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "Elm Discuss" group. >>> To unsubscribe from this topic, visit https://groups.google.com/d/ >>> topic/elm-discuss/fwDl6deEC1Q/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> [email protected]. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Elm Discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> For more options, visit https://groups.google.com/d/optout. >> > > -- > You received this message because you are subscribed to a topic in the > Google Groups "Elm Discuss" group. > To unsubscribe from this topic, visit https://groups.google.com/d/ > topic/elm-discuss/fwDl6deEC1Q/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > For more options, visit https://groups.google.com/d/optout. > > -- You received this message because you are subscribed to the Google Groups "Elm Discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
