public bool TryGetLength(Type type, object value, out uint length, string scenario = default, string @case = default) { if (scenario != null && !Scenarios.Exists(x => x.Name == scenario)) { throw new MissingMethodException($"Scenario {scenario} is missing!"); } else { ISerializationRule rule = _Rules.Find(x => x.CheckSuitability(type) == SuitabilityDegree.Equal); if (rule != null) { return(rule.TryGetLength(value, out length, scenario, @case)); } else { rule = _Rules.Find(x => x.CheckSuitability(type) == SuitabilityDegree.Assignable); if (rule != null) { return(rule.TryGetLength(value, out length, scenario, @case)); } else { length = 0; return(false); } } } }
/// <summary> /// Adds a rule to the engine. /// </summary> /// <remarks> /// Will overwrite previous rules for the same type. /// </remarks> /// <param name="rule">The <see cref="ISerializationRule"/> to add.</param> public void AddRule(ISerializationRule rule) { rules.AddOrUpdate(rule.TargetKey, rule.Allow, (_, __) => rule.Allow); if (LoadingDefaults) { defaultRules.AddOrUpdate( rule.TargetKey, rule.Allow, (_, __) => rule.Allow); } }
public void RemoveRule(ISerializationRule rule) { _Rules.Remove(rule); rule.BinarySerializer = null; }
public void AddRule(ISerializationRule rule) { _Rules.Add(rule); rule.BinarySerializer = this; }
/// <summary> /// Adds a rule to the engine. /// </summary> /// <remarks> /// Will overwrite previous rules for the same type. /// </remarks> /// <param name="rule">The <see cref="ISerializationRule"/> to add.</param> public void AddRule(ISerializationRule rule) => rules.AddOrUpdate(rule.TargetKey, rule.Allow, (_, __) => rule.Allow);