@@ -211,8 +211,9 @@ newDynamicField :: (MonadIO m) => DynamicField -> m (Field DynamicField Unique)
211
211
newDynamicField output =
212
212
newField
213
213
( case output of
214
- DynamicFieldNumber {} -> FieldTypeNumber
215
214
DynamicFieldText {} -> FieldTypeText
215
+ DynamicFieldNumber {} -> FieldTypeNumber
216
+ DynamicFieldRfc2397 {} -> FieldTypeImage
216
217
)
217
218
output
218
219
inspectDynamicField
@@ -221,8 +222,9 @@ newDynamicFieldId :: DynamicField -> Field DynamicField Identity
221
222
newDynamicFieldId output =
222
223
newFieldId
223
224
( case output of
224
- DynamicFieldNumber {} -> FieldTypeNumber
225
225
DynamicFieldText {} -> FieldTypeText
226
+ DynamicFieldNumber {} -> FieldTypeNumber
227
+ DynamicFieldRfc2397 {} -> FieldTypeImage
226
228
)
227
229
inspectDynamicField
228
230
output
@@ -237,31 +239,37 @@ newDynamicTitleField =
237
239
data DynamicField
238
240
= DynamicFieldText Unicode
239
241
| DynamicFieldNumber Rational
242
+ | DynamicFieldRfc2397 (Maybe Unicode ) Rfc2397
240
243
deriving stock (Eq , Ord , Show , Data , Generic )
241
244
deriving (Binary ) via GenericType DynamicField
242
245
243
246
parseDynamicField :: Field DynamicField Unique -> Maybe DynamicField
244
247
parseDynamicField value =
245
- case value ^. # fieldType of
246
- FieldTypeNumber -> DynamicFieldNumber <$> parseRatio str
247
- FieldTypePercent -> DynamicFieldNumber <$> parseRatio str
248
- _ -> Just $ DynamicFieldText str
249
- where
250
- str = value ^. # fieldInput . # uniqueValue
248
+ parseDynamic value $ value ^. # fieldInput . # uniqueValue
251
249
252
250
parseDynamicFieldId :: Field DynamicField Identity -> Maybe DynamicField
253
251
parseDynamicFieldId value =
252
+ parseDynamic value $ value ^. # fieldInput . # runIdentity
253
+
254
+ parseDynamic :: Field DynamicField f -> Unicode -> Maybe DynamicField
255
+ parseDynamic value str =
254
256
case value ^. # fieldType of
255
257
FieldTypeNumber -> DynamicFieldNumber <$> parseRatio str
256
258
FieldTypePercent -> DynamicFieldNumber <$> parseRatio str
257
- _ -> Just $ DynamicFieldText str
258
- where
259
- str = value ^. # fieldInput . # runIdentity
259
+ FieldTypeImage -> do
260
+ let mVal = decodeRfc2397 str
261
+ let mRef = case value ^. # fieldOutput of
262
+ DynamicFieldRfc2397 ref val | mVal == Just val -> ref
263
+ _ -> Nothing
264
+ fmap (DynamicFieldRfc2397 mRef) mVal <|> Just (DynamicFieldText str)
265
+ _ ->
266
+ Just $ DynamicFieldText str
260
267
261
268
inspectDynamicField :: DynamicField -> Unicode
262
269
inspectDynamicField = \ case
263
270
DynamicFieldText x -> x
264
271
DynamicFieldNumber x -> inspectRatioDef x
272
+ DynamicFieldRfc2397 _ x -> encodeRfc2397 x
265
273
266
274
data FieldType
267
275
= -- Rational
0 commit comments