diff --git a/protoc-gen-elm/go_tests/testdata/map_entry/expected_output/Map_entry.elm b/protoc-gen-elm/go_tests/testdata/map_entry/expected_output/Map_entry.elm index 99cda17..e736656 100644 --- a/protoc-gen-elm/go_tests/testdata/map_entry/expected_output/Map_entry.elm +++ b/protoc-gen-elm/go_tests/testdata/map_entry/expected_output/Map_entry.elm @@ -15,6 +15,7 @@ import Dict type alias Bar = { field : Bool -- 1 } +type BarMessage = BarMessage Bar barDecoder : JD.Decoder Bar @@ -31,44 +32,46 @@ barEncoder v = type alias Foo = - { stringToBars : Dict.Dict String Bar -- 8 + { stringToBars : Dict.Dict String BarMessage -- 8 , stringToStrings : Dict.Dict String String -- 7 } +type FooMessage = FooMessage Foo fooDecoder : JD.Decoder Foo fooDecoder = JD.lazy <| \_ -> decode Foo - |> mapEntries "stringToBars" barDecoder + |> mapEntries "stringToBars" (JD.map BarMessage barDecoder) |> mapEntries "stringToStrings" JD.string fooEncoder : Foo -> JE.Value fooEncoder v = JE.object <| List.filterMap identity <| - [ (mapEntriesFieldEncoder "stringToBars" barEncoder v.stringToBars) + [ (mapEntriesFieldEncoder "stringToBars" (\(BarMessage f) -> barEncoder f) v.stringToBars) , (mapEntriesFieldEncoder "stringToStrings" JE.string v.stringToStrings) ] type alias Foo_StringToBarsEntry = { key : String -- 1 - , value : Maybe Bar -- 2 + , value : Maybe BarMessage -- 2 } +type Foo_StringToBarsEntryMessage = Foo_StringToBarsEntryMessage Foo_StringToBarsEntry foo_StringToBarsEntryDecoder : JD.Decoder Foo_StringToBarsEntry foo_StringToBarsEntryDecoder = JD.lazy <| \_ -> decode Foo_StringToBarsEntry |> required "key" JD.string "" - |> optional "value" barDecoder + |> optional "value" (JD.map BarMessage barDecoder) foo_StringToBarsEntryEncoder : Foo_StringToBarsEntry -> JE.Value foo_StringToBarsEntryEncoder v = JE.object <| List.filterMap identity <| [ (requiredFieldEncoder "key" JE.string "" v.key) - , (optionalEncoder "value" barEncoder v.value) + , (optionalEncoder "value" (\(BarMessage f) -> barEncoder f) v.value) ] @@ -76,6 +79,7 @@ type alias Foo_StringToStringsEntry = { key : String -- 1 , value : String -- 2 } +type Foo_StringToStringsEntryMessage = Foo_StringToStringsEntryMessage Foo_StringToStringsEntry foo_StringToStringsEntryDecoder : JD.Decoder Foo_StringToStringsEntry diff --git a/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File1.elm b/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File1.elm index 8c243bb..df0a532 100644 --- a/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File1.elm +++ b/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File1.elm @@ -14,6 +14,7 @@ import Json.Encode as JE type alias File1Message = { field : Bool -- 1 } +type File1MessageMessage = File1MessageMessage File1Message file1MessageDecoder : JD.Decoder File1Message diff --git a/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File2.elm b/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File2.elm index 930fdc6..a791071 100644 --- a/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File2.elm +++ b/protoc-gen-elm/go_tests/testdata/multiple_files/expected_output/File2.elm @@ -14,6 +14,7 @@ import Json.Encode as JE type alias File2Message = { field : Bool -- 1 } +type File2MessageMessage = File2MessageMessage File2Message file2MessageDecoder : JD.Decoder File2Message diff --git a/protoc-gen-elm/go_tests/testdata/oneof/expected_output/Oneof.elm b/protoc-gen-elm/go_tests/testdata/oneof/expected_output/Oneof.elm index ad59767..17eab63 100644 --- a/protoc-gen-elm/go_tests/testdata/oneof/expected_output/Oneof.elm +++ b/protoc-gen-elm/go_tests/testdata/oneof/expected_output/Oneof.elm @@ -67,6 +67,7 @@ secondOneofEncoder v = Just ( "boolField", JE.bool x ) OtherStringField x -> Just ( "otherStringField", JE.string x ) +type FooMessage = FooMessage Foo fooDecoder : JD.Decoder Foo diff --git a/protoc-gen-elm/go_tests/testdata/repeated/expected_output/Repeated.elm b/protoc-gen-elm/go_tests/testdata/repeated/expected_output/Repeated.elm index 6f5150a..fadf49a 100644 --- a/protoc-gen-elm/go_tests/testdata/repeated/expected_output/Repeated.elm +++ b/protoc-gen-elm/go_tests/testdata/repeated/expected_output/Repeated.elm @@ -69,6 +69,7 @@ enumEncoder v = type alias SubMessage = { int32Field : Int -- 1 } +type SubMessageMessage = SubMessageMessage SubMessage subMessageDecoder : JD.Decoder SubMessage @@ -100,12 +101,13 @@ type alias Foo = , boolField : Bool -- 13 , stringField : String -- 14 , enumField : Enum -- 15 - , subMessage : Maybe SubMessage -- 16 + , subMessage : Maybe SubMessageMessage -- 16 , repeatedInt64Field : List Int -- 17 , repeatedEnumField : List Enum -- 18 - , nestedMessageField : Maybe Foo_NestedMessage -- 19 + , nestedMessageField : Maybe Foo_NestedMessageMessage -- 19 , nestedEnumField : Foo_NestedEnum -- 20 } +type FooMessage = FooMessage Foo type Foo_NestedEnum @@ -130,10 +132,10 @@ fooDecoder = |> required "boolField" JD.bool False |> required "stringField" JD.string "" |> required "enumField" enumDecoder enumDefault - |> optional "subMessage" subMessageDecoder + |> optional "subMessage" (JD.map SubMessageMessage subMessageDecoder) |> repeated "repeatedInt64Field" intDecoder |> repeated "repeatedEnumField" enumDecoder - |> optional "nestedMessageField" foo_NestedMessageDecoder + |> optional "nestedMessageField" (JD.map Foo_NestedMessageMessage foo_NestedMessageDecoder) |> required "nestedEnumField" foo_NestedEnumDecoder foo_NestedEnumDefault @@ -173,10 +175,10 @@ fooEncoder v = , (requiredFieldEncoder "boolField" JE.bool False v.boolField) , (requiredFieldEncoder "stringField" JE.string "" v.stringField) , (requiredFieldEncoder "enumField" enumEncoder enumDefault v.enumField) - , (optionalEncoder "subMessage" subMessageEncoder v.subMessage) + , (optionalEncoder "subMessage" (\(SubMessageMessage f) -> subMessageEncoder f) v.subMessage) , (repeatedFieldEncoder "repeatedInt64Field" numericStringEncoder v.repeatedInt64Field) , (repeatedFieldEncoder "repeatedEnumField" enumEncoder v.repeatedEnumField) - , (optionalEncoder "nestedMessageField" foo_NestedMessageEncoder v.nestedMessageField) + , (optionalEncoder "nestedMessageField" (\(Foo_NestedMessageMessage f) -> foo_NestedMessageEncoder f) v.nestedMessageField) , (requiredFieldEncoder "nestedEnumField" foo_NestedEnumEncoder foo_NestedEnumDefault v.nestedEnumField) ] @@ -196,6 +198,7 @@ foo_NestedEnumEncoder v = type alias Foo_NestedMessage = { int32Field : Int -- 1 } +type Foo_NestedMessageMessage = Foo_NestedMessageMessage Foo_NestedMessage foo_NestedMessageDecoder : JD.Decoder Foo_NestedMessage @@ -214,6 +217,7 @@ foo_NestedMessageEncoder v = type alias Foo_NestedMessage_NestedNestedMessage = { int32Field : Int -- 1 } +type Foo_NestedMessage_NestedNestedMessageMessage = Foo_NestedMessage_NestedNestedMessageMessage Foo_NestedMessage_NestedNestedMessage foo_NestedMessage_NestedNestedMessageDecoder : JD.Decoder Foo_NestedMessage_NestedNestedMessage @@ -245,8 +249,9 @@ type alias FooRepeated = , boolField : List Bool -- 13 , stringField : List String -- 14 , enumField : List Enum -- 15 - , subMessage : List SubMessage -- 16 + , subMessage : List SubMessageMessage -- 16 } +type FooRepeatedMessage = FooRepeatedMessage FooRepeated fooRepeatedDecoder : JD.Decoder FooRepeated @@ -267,7 +272,7 @@ fooRepeatedDecoder = |> repeated "boolField" JD.bool |> repeated "stringField" JD.string |> repeated "enumField" enumDecoder - |> repeated "subMessage" subMessageDecoder + |> repeated "subMessage" (JD.map SubMessageMessage subMessageDecoder) fooRepeatedEncoder : FooRepeated -> JE.Value @@ -288,5 +293,5 @@ fooRepeatedEncoder v = , (repeatedFieldEncoder "boolField" JE.bool v.boolField) , (repeatedFieldEncoder "stringField" JE.string v.stringField) , (repeatedFieldEncoder "enumField" enumEncoder v.enumField) - , (repeatedFieldEncoder "subMessage" subMessageEncoder v.subMessage) + , (repeatedFieldEncoder "subMessage" (\(SubMessageMessage f) -> subMessageEncoder f) v.subMessage) ] diff --git a/protoc-gen-elm/go_tests/testdata/well_known_types/expected_output/Well_known_types.elm b/protoc-gen-elm/go_tests/testdata/well_known_types/expected_output/Well_known_types.elm index 431b498..5f97c65 100644 --- a/protoc-gen-elm/go_tests/testdata/well_known_types/expected_output/Well_known_types.elm +++ b/protoc-gen-elm/go_tests/testdata/well_known_types/expected_output/Well_known_types.elm @@ -14,6 +14,7 @@ import Json.Encode as JE type alias Message = { doubleValueField : Maybe Float -- 1 } +type MessageMessage = MessageMessage Message messageDecoder : JD.Decoder Message diff --git a/protoc-gen-elm/message.go b/protoc-gen-elm/message.go index f6988db..62bdc2f 100644 --- a/protoc-gen-elm/message.go +++ b/protoc-gen-elm/message.go @@ -109,6 +109,8 @@ func (fg *FileGenerator) GenerateMessageDefinition(prefix string, inMessage *des fg.GenerateOneofEncoder(prefix, inMessage, i) } + fg.P("type %sMessage = %sMessage %s", typeName, typeName, typeName) + return nil } @@ -248,14 +250,20 @@ func fieldElmType(inField *descriptor.FieldDescriptorProto) string { return "Bool" case descriptor.FieldDescriptorProto_TYPE_STRING: return "String" - case descriptor.FieldDescriptorProto_TYPE_MESSAGE, - descriptor.FieldDescriptorProto_TYPE_ENUM: + case descriptor.FieldDescriptorProto_TYPE_ENUM: // Well known types. if n, ok := excludedTypes[inField.GetTypeName()]; ok { return n } _, messageName := convert(inField.GetTypeName()) return messageName + case descriptor.FieldDescriptorProto_TYPE_MESSAGE: + // Well known types. + if n, ok := excludedTypes[inField.GetTypeName()]; ok { + return n + } + _, messageName := convert(inField.GetTypeName()) + return messageName + "Message" case descriptor.FieldDescriptorProto_TYPE_BYTES: // XXX return "Bytes" @@ -297,7 +305,7 @@ func fieldEncoderName(inField *descriptor.FieldDescriptorProto) string { return n } _, messageName := convert(inField.GetTypeName()) - return encoderName(messageName) + return fmt.Sprintf("(\\(%sMessage f) -> %s f)", messageName, encoderName(messageName)) case descriptor.FieldDescriptorProto_TYPE_BYTES: return "bytesFieldEncoder" default: @@ -336,7 +344,7 @@ func fieldDecoderName(inField *descriptor.FieldDescriptorProto) string { return n } _, messageName := convert(inField.GetTypeName()) - return decoderName(messageName) + return fmt.Sprintf("(JD.map %sMessage %s)", messageName, decoderName(messageName)) case descriptor.FieldDescriptorProto_TYPE_BYTES: return "bytesFieldDecoder" default: diff --git a/tests/Dir/Other_dir.elm b/tests/Dir/Other_dir.elm index f7d720e..a0b0ba2 100644 --- a/tests/Dir/Other_dir.elm +++ b/tests/Dir/Other_dir.elm @@ -14,6 +14,7 @@ import Json.Encode as JE type alias OtherDir = { stringField : String -- 1 } +type OtherDirMessage = OtherDirMessage OtherDir otherDirDecoder : JD.Decoder OtherDir diff --git a/tests/Fuzzer.elm b/tests/Fuzzer.elm index 61512fc..767aeeb 100644 --- a/tests/Fuzzer.elm +++ b/tests/Fuzzer.elm @@ -18,6 +18,7 @@ type alias Fuzz = , int32ValueField : Maybe Int -- 4 , timestampField : Maybe Timestamp -- 5 } +type FuzzMessage = FuzzMessage Fuzz fuzzDecoder : JD.Decoder Fuzz diff --git a/tests/Integers.elm b/tests/Integers.elm index 3205457..897c1c7 100644 --- a/tests/Integers.elm +++ b/tests/Integers.elm @@ -18,6 +18,7 @@ type alias ThirtyTwo = , fixed32Field : Int -- 4 , sfixed32Field : Int -- 5 } +type ThirtyTwoMessage = ThirtyTwoMessage ThirtyTwo thirtyTwoDecoder : JD.Decoder ThirtyTwo @@ -48,6 +49,7 @@ type alias SixtyFour = , fixed64Field : Int -- 4 , sfixed64Field : Int -- 5 } +type SixtyFourMessage = SixtyFourMessage SixtyFour sixtyFourDecoder : JD.Decoder SixtyFour diff --git a/tests/Keywords.elm b/tests/Keywords.elm index d27f9cb..6a88f6e 100644 --- a/tests/Keywords.elm +++ b/tests/Keywords.elm @@ -27,6 +27,7 @@ type alias Keywords = , port_ : Int -- 13 , as_ : Int -- 14 } +type KeywordsMessage = KeywordsMessage Keywords keywordsDecoder : JD.Decoder Keywords diff --git a/tests/Main.elm b/tests/Main.elm index 554aa93..3cd1bb7 100644 --- a/tests/Main.elm +++ b/tests/Main.elm @@ -1,5 +1,6 @@ module Main exposing (assertEncodeDecode, decode, emptyJson, encode, foo, fooDefault, fooJson, fuzz, genFuzz, json32numbers, json32strings, json64numbers, json64strings, map, mapJson, msg, msg32, msg64, msgDefault, msgEmpty, msgExtraFieldJson, msgJson, nullJson, oo1Set, oo1SetJson, oo2Set, oo2SetJson, rec1, rec2, recDefault, recJson1, recJson2, suite, timestampFoo, timestampJson, wrappersEmpty, wrappersJsonEmpty, wrappersJsonNull, wrappersJsonSet, wrappersJsonZero, wrappersSet, wrappersZero, wrongTypeJson) +import Dir.Other_dir as OD import Expect exposing (..) import Fuzz exposing (..) import Fuzzer as F @@ -9,6 +10,7 @@ import Json.Decode as JD import Json.Encode as JE import Keywords as K import Map as M +import Other as O import Protobuf exposing (..) import Recursive as R import Result @@ -185,14 +187,10 @@ emptyJson = foo : T.Foo foo = { s = - Just - { int32Field = 11 - } + Just <| T.SimpleMessage { int32Field = 11 } , ss = - [ { int32Field = 111 - } - , { int32Field = 222 - } + [ T.SimpleMessage { int32Field = 111 } + , T.SimpleMessage { int32Field = 222 } ] , colour = T.Red , colours = @@ -209,13 +207,9 @@ foo = , bytesField = [] , stringValueField = Nothing , otherField = - Just - { stringField = "xxx" - } + Just <| O.OtherMessage { stringField = "xxx" } , otherDirField = - Just - { stringField = "yyy" - } + Just <| OD.OtherDirMessage { stringField = "yyy" } , timestampField = Nothing } @@ -320,11 +314,12 @@ rec1 : R.Rec rec1 = { int32Field = 0 , r = - R.RecField - { int32Field = 0 - , r = R.RUnspecified - , stringField = "" - } + R.RecField <| + R.RecMessage + { int32Field = 0 + , r = R.RUnspecified + , stringField = "" + } , stringField = "" } @@ -344,16 +339,18 @@ rec2 : R.Rec rec2 = { int32Field = 0 , r = - R.RecField - { int32Field = 0 - , r = - R.RecField - { int32Field = 0 - , r = R.RUnspecified - , stringField = "" - } - , stringField = "" - } + R.RecField <| + R.RecMessage + { int32Field = 0 + , r = + R.RecField <| + R.RecMessage + { int32Field = 0 + , r = R.RUnspecified + , stringField = "" + } + , stringField = "" + } , stringField = "" } @@ -478,8 +475,8 @@ wrappersSet = map : M.MessageWithMaps map = { stringToMessages = Dict.fromList - [ ( "foo" , { field = True } ), - ( "bar" , { field = False } ) + [ ( "foo" , M.MapValueMessage { field = True } ), + ( "bar" , M.MapValueMessage { field = False } ) ], stringToStrings = Dict.fromList [ diff --git a/tests/Map.elm b/tests/Map.elm index d465a35..9402fd3 100644 --- a/tests/Map.elm +++ b/tests/Map.elm @@ -15,6 +15,7 @@ import Dict type alias MapValue = { field : Bool -- 1 } +type MapValueMessage = MapValueMessage MapValue mapValueDecoder : JD.Decoder MapValue @@ -31,44 +32,46 @@ mapValueEncoder v = type alias MessageWithMaps = - { stringToMessages : Dict.Dict String MapValue -- 8 + { stringToMessages : Dict.Dict String MapValueMessage -- 8 , stringToStrings : Dict.Dict String String -- 7 } +type MessageWithMapsMessage = MessageWithMapsMessage MessageWithMaps messageWithMapsDecoder : JD.Decoder MessageWithMaps messageWithMapsDecoder = JD.lazy <| \_ -> decode MessageWithMaps - |> mapEntries "stringToMessages" mapValueDecoder + |> mapEntries "stringToMessages" (JD.map MapValueMessage mapValueDecoder) |> mapEntries "stringToStrings" JD.string messageWithMapsEncoder : MessageWithMaps -> JE.Value messageWithMapsEncoder v = JE.object <| List.filterMap identity <| - [ (mapEntriesFieldEncoder "stringToMessages" mapValueEncoder v.stringToMessages) + [ (mapEntriesFieldEncoder "stringToMessages" (\(MapValueMessage f) -> mapValueEncoder f) v.stringToMessages) , (mapEntriesFieldEncoder "stringToStrings" JE.string v.stringToStrings) ] type alias MessageWithMaps_StringToMessagesEntry = { key : String -- 1 - , value : Maybe MapValue -- 2 + , value : Maybe MapValueMessage -- 2 } +type MessageWithMaps_StringToMessagesEntryMessage = MessageWithMaps_StringToMessagesEntryMessage MessageWithMaps_StringToMessagesEntry messageWithMaps_StringToMessagesEntryDecoder : JD.Decoder MessageWithMaps_StringToMessagesEntry messageWithMaps_StringToMessagesEntryDecoder = JD.lazy <| \_ -> decode MessageWithMaps_StringToMessagesEntry |> required "key" JD.string "" - |> optional "value" mapValueDecoder + |> optional "value" (JD.map MapValueMessage mapValueDecoder) messageWithMaps_StringToMessagesEntryEncoder : MessageWithMaps_StringToMessagesEntry -> JE.Value messageWithMaps_StringToMessagesEntryEncoder v = JE.object <| List.filterMap identity <| [ (requiredFieldEncoder "key" JE.string "" v.key) - , (optionalEncoder "value" mapValueEncoder v.value) + , (optionalEncoder "value" (\(MapValueMessage f) -> mapValueEncoder f) v.value) ] @@ -76,6 +79,7 @@ type alias MessageWithMaps_StringToStringsEntry = { key : String -- 1 , value : String -- 2 } +type MessageWithMaps_StringToStringsEntryMessage = MessageWithMaps_StringToStringsEntryMessage MessageWithMaps_StringToStringsEntry messageWithMaps_StringToStringsEntryDecoder : JD.Decoder MessageWithMaps_StringToStringsEntry diff --git a/tests/Other.elm b/tests/Other.elm index 7bbed17..091fb83 100644 --- a/tests/Other.elm +++ b/tests/Other.elm @@ -14,6 +14,7 @@ import Json.Encode as JE type alias Other = { stringField : String -- 1 } +type OtherMessage = OtherMessage Other otherDecoder : JD.Decoder Other diff --git a/tests/Recursive.elm b/tests/Recursive.elm index 9477435..4eac6dd 100644 --- a/tests/Recursive.elm +++ b/tests/Recursive.elm @@ -20,13 +20,13 @@ type alias Rec = type R = RUnspecified - | RecField Rec + | RecField RecMessage rDecoder : JD.Decoder R rDecoder = JD.lazy <| \_ -> JD.oneOf - [ JD.map RecField (JD.field "recField" recDecoder) + [ JD.map RecField (JD.field "recField" (JD.map RecMessage recDecoder)) , JD.succeed RUnspecified ] @@ -37,7 +37,8 @@ rEncoder v = RUnspecified -> Nothing RecField x -> - Just ( "recField", recEncoder x ) + Just ( "recField", (\(RecMessage f) -> recEncoder f) x ) +type RecMessage = RecMessage Rec recDecoder : JD.Decoder Rec diff --git a/tests/Simple.elm b/tests/Simple.elm index 007618c..2e05064 100644 --- a/tests/Simple.elm +++ b/tests/Simple.elm @@ -71,6 +71,7 @@ colourEncoder v = type alias Empty = { } +type EmptyMessage = EmptyMessage Empty emptyDecoder : JD.Decoder Empty @@ -88,6 +89,7 @@ emptyEncoder v = type alias Simple = { int32Field : Int -- 1 } +type SimpleMessage = SimpleMessage Simple simpleDecoder : JD.Decoder Simple @@ -104,16 +106,16 @@ simpleEncoder v = type alias Foo = - { s : Maybe Simple -- 1 - , ss : List Simple -- 2 + { s : Maybe SimpleMessage -- 1 + , ss : List SimpleMessage -- 2 , colour : Colour -- 3 , colours : List Colour -- 4 , singleIntField : Int -- 5 , repeatedIntField : List Int -- 6 , bytesField : Bytes -- 9 , stringValueField : Maybe String -- 10 - , otherField : Maybe Other -- 11 - , otherDirField : Maybe OtherDir -- 12 + , otherField : Maybe OtherMessage -- 11 + , otherDirField : Maybe OtherDirMessage -- 12 , timestampField : Maybe Timestamp -- 13 , oo : Oo } @@ -143,21 +145,22 @@ ooEncoder v = Just ( "oo1", JE.int x ) Oo2 x -> Just ( "oo2", JE.bool x ) +type FooMessage = FooMessage Foo fooDecoder : JD.Decoder Foo fooDecoder = JD.lazy <| \_ -> decode Foo - |> optional "s" simpleDecoder - |> repeated "ss" simpleDecoder + |> optional "s" (JD.map SimpleMessage simpleDecoder) + |> repeated "ss" (JD.map SimpleMessage simpleDecoder) |> required "colour" colourDecoder colourDefault |> repeated "colours" colourDecoder |> required "singleIntField" intDecoder 0 |> repeated "repeatedIntField" intDecoder |> required "bytesField" bytesFieldDecoder [] |> optional "stringValueField" stringValueDecoder - |> optional "otherField" otherDecoder - |> optional "otherDirField" otherDirDecoder + |> optional "otherField" (JD.map OtherMessage otherDecoder) + |> optional "otherDirField" (JD.map OtherDirMessage otherDirDecoder) |> optional "timestampField" timestampDecoder |> field ooDecoder @@ -165,16 +168,16 @@ fooDecoder = fooEncoder : Foo -> JE.Value fooEncoder v = JE.object <| List.filterMap identity <| - [ (optionalEncoder "s" simpleEncoder v.s) - , (repeatedFieldEncoder "ss" simpleEncoder v.ss) + [ (optionalEncoder "s" (\(SimpleMessage f) -> simpleEncoder f) v.s) + , (repeatedFieldEncoder "ss" (\(SimpleMessage f) -> simpleEncoder f) v.ss) , (requiredFieldEncoder "colour" colourEncoder colourDefault v.colour) , (repeatedFieldEncoder "colours" colourEncoder v.colours) , (requiredFieldEncoder "singleIntField" JE.int 0 v.singleIntField) , (repeatedFieldEncoder "repeatedIntField" JE.int v.repeatedIntField) , (requiredFieldEncoder "bytesField" bytesFieldEncoder [] v.bytesField) , (optionalEncoder "stringValueField" stringValueEncoder v.stringValueField) - , (optionalEncoder "otherField" otherEncoder v.otherField) - , (optionalEncoder "otherDirField" otherDirEncoder v.otherDirField) + , (optionalEncoder "otherField" (\(OtherMessage f) -> otherEncoder f) v.otherField) + , (optionalEncoder "otherDirField" (\(OtherDirMessage f) -> otherDirEncoder f) v.otherDirField) , (optionalEncoder "timestampField" timestampEncoder v.timestampField) , (ooEncoder v.oo) ] diff --git a/tests/Wrappers.elm b/tests/Wrappers.elm index 915bc79..45db3a6 100644 --- a/tests/Wrappers.elm +++ b/tests/Wrappers.elm @@ -22,6 +22,7 @@ type alias Wrappers = , stringValueField : Maybe String -- 8 , bytesValueField : Maybe Bytes -- 9 } +type WrappersMessage = WrappersMessage Wrappers wrappersDecoder : JD.Decoder Wrappers