Example #1
0
 public PrefVal <C> collection <A, C, CB>(
     string key,
     Fn <A, byte[]> serialize, Fn <byte[], Option <A> > deserialize,
     Fn <CB> createCollectionBuilder, Act <CB, A> addToCollection,
     Fn <CB, C> builderToCollection,
     C defaultVal, bool saveOnEveryWrite = true,
     PrefVal.OnDeserializeFailure onDeserializeFailure =
     PrefVal.OnDeserializeFailure.ReturnDefault,
     PrefVal.OnDeserializeCollectionItemFailure onDeserializeCollectionItemFailure =
     PrefVal.OnDeserializeCollectionItemFailure.Ignore,
     ILog log = null
     ) where C : IEnumerable <A>
 {
     log = log ?? Log.defaultLogger;
     return(base64(
                key, defaultVal,
                c => c.Select(a => serialize(a)),
                parts => {
         var b = createCollectionBuilder();
         foreach (var partData in parts)
         {
             var deserialized = deserialize(partData);
             if (deserialized.isDefined)
             {
                 addToCollection(b, deserialized.get);
             }
             else
             {
                 if (
                     onDeserializeCollectionItemFailure ==
                     PrefVal.OnDeserializeCollectionItemFailure.Ignore
                     )
                 {
                     if (log.isWarn())
                     {
                         log.warn(deserializeCollectionItemFailureMsg <A, C>(key, partData, ", ignoring"));
                     }
                 }
                 else
                 {
                     throw new SerializationException(
                         deserializeCollectionItemFailureMsg <A, C>(key, partData)
                         );
                 }
             }
         }
         return builderToCollection(b).some();
     },
                saveOnEveryWrite: saveOnEveryWrite,
                onDeserializeFailure: onDeserializeFailure,
                log: log
                ));
 }
Example #2
0
 PrefVal <ImmutableList <int> > create(
     ImmutableList <int> defaultVal,
     Fn <byte[], Option <int> > deserializeFn = null,
     PrefVal.OnDeserializeCollectionItemFailure onItemFailure =
     PrefVal.OnDeserializeCollectionItemFailure.ThrowException
     ) =>
 storage.collection(
     key, serialize, deserializeFn ?? deserialize,
     createBuilder, add, toList, defaultVal,
     onDeserializeCollectionItemFailure: onItemFailure,
     log: log
     );
Example #3
0
 public PrefVal <ImmutableHashSet <A> > hashSet <A>(
     string key,
     Fn <A, byte[]> serialize, Fn <byte[], Option <A> > deserialize,
     ImmutableHashSet <A> defaultVal = null, bool saveOnEveryWrite = true,
     PrefVal.OnDeserializeFailure onDeserializeFailure =
     PrefVal.OnDeserializeFailure.ReturnDefault,
     PrefVal.OnDeserializeCollectionItemFailure onDeserializeCollectionItemFailure =
     PrefVal.OnDeserializeCollectionItemFailure.Ignore,
     ILog log = null
     ) => collection(
     key, serialize, deserialize,
     ImmutableHashSet.CreateBuilder <A>, (b, a) => b.Add(a), b => b.ToImmutable(),
     defaultVal ?? ImmutableHashSet <A> .Empty,
     saveOnEveryWrite, onDeserializeFailure, onDeserializeCollectionItemFailure, log
     );