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 )); }
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 );
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 );