Exemplo n.º 1
0
 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);
            }
        }
Exemplo n.º 3
0
 public void RemoveRule(ISerializationRule rule)
 {
     _Rules.Remove(rule);
     rule.BinarySerializer = null;
 }
Exemplo n.º 4
0
 public void AddRule(ISerializationRule rule)
 {
     _Rules.Add(rule);
     rule.BinarySerializer = this;
 }
Exemplo n.º 5
0
 /// <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);