/// <summary> /// Generates one GDID from the supplied provider taking its scope and sequence name from <see cref="UniqueSequenceAttribute"/> /// </summary> /// <param name="provider">Provider to use</param> /// <param name="tDoc">Type of data Doc</param> /// <returns>One GDID</returns> public static GDID GenerateGdidFor(this Idgen.IGdidProvider provider, Type tDoc) { provider.NonNull(nameof(provider)); tDoc.IsOfType <Doc>(nameof(tDoc)); var atr = UniqueSequenceAttribute.GetForDocType(tDoc); atr.NonNull($"`{tDoc.Name}` decorated with `{nameof(UniqueSequenceAttribute)}`"); var result = provider.GenerateOneGdid(atr.Scope, atr.Sequence); return(result); }
/// <summary> /// Tries to generate many consecutive Globally-Unique distributed ID (GDID) from the same authority for the supplied sequence name. /// If the reserved block gets exhausted, then the returned ID array length may be less than requested /// The scope and sequence name are taken from <see cref="UniqueSequenceAttribute"/> /// </summary> /// <param name="provider">Provider to use</param> /// <param name="tDoc">Type of data Doc</param> /// <param name="gdidCount">How many GDIDS to generate</param> /// <returns>The GDID[] instance which may have less elements than requested by gdidCount</returns> public static GDID[] TryGenerateManyConsecutiveGdidsFor(this Idgen.IGdidProvider provider, Type tDoc, int gdidCount) { provider.NonNull(nameof(provider)); tDoc.IsOfType <Doc>(nameof(tDoc)); gdidCount.IsTrue(v => v > 0, "gdidCount > 0"); var atr = UniqueSequenceAttribute.GetForDocType(tDoc); atr.NonNull($"`{tDoc.Name}` decorated with `{nameof(UniqueSequenceAttribute)}`"); var result = provider.TryGenerateManyConsecutiveGdids(atr.Scope, atr.Sequence, gdidCount); return(result); }