@@ -100,34 +100,35 @@ object encoding {
100100
101101 def encodeRecord [R ](
102102 record : Record [R ]
103- ): R => Either [WriteError , DynamoValue ] = {
104- val fieldCount = record.fields.length
105- val fieldNames = record.fieldNames
106-
107- val writers =
108- record.fields.map(field => (field.get, field.schema.write(_))).toArray
109-
110- { value =>
111- {
112- val dict = scalajs.js.Dictionary [AttributeValue ]()
113- var i = 0
114- var error : WriteError = null
115-
116- while (i < record.fields.length && error == null ) {
117- val field = record.fields(i)
118- val fieldValue = field.get(value)
119- field.schema.write(fieldValue.asInstanceOf [field.A ]) match {
103+ ): R => Either [WriteError , DynamoValue ] = { value =>
104+ var i = 0
105+ var error : WriteError = null
106+
107+ val dict = scalajs.js.Dictionary [AttributeValue ]()
108+
109+ while (i < record.fields.length && error == null ) {
110+ record.fields(i) match {
111+ case Field .Required (name, schema, get) =>
112+ schema.write(get(value)) match {
120113 case Left (err) => error = err
121- case Right (v) => dict.addOne(fieldNames(i), v.value)
114+ case Right (v) => dict.addOne(name, v.value)
115+ }
116+ case Field .Optional (name, schema, get) =>
117+ val fieldValue = get(value)
118+ if (fieldValue != None ) {
119+ schema.write(fieldValue.get) match {
120+ case Left (err) => error = err
121+ case Right (v) => dict.addOne(name, v.value)
122+ }
122123 }
123- i += 1
124- }
125-
126- if (error != null ) Left (error)
127- else {
128- DynamoValue (AttributeValue .M (dict)).asRight[WriteError ]
129- }
130124 }
125+
126+ i += 1
131127 }
128+
129+ if (error != null )
130+ Left (error)
131+ else
132+ DynamoValue (AttributeValue .M (dict)).asRight[WriteError ]
132133 }
133134}
0 commit comments