public static StObject FromParser(BinaryParser parser, int?hint = null) { var so = new StObject(); // hint, is how many bytes to parse if (hint != null) { // end hint hint = parser.Pos() + hint; } while (!parser.End(hint)) { var field = parser.ReadField(); if (field == Field.ObjectEndMarker) { break; } var sizeHint = field.IsVlEncoded ? parser.ReadVlLength() : (int?)null; var st = field.FromParser(parser, sizeHint); if (st == null) { throw new InvalidOperationException("Parsed " + field + " as null"); } so.Fields[field] = st; } return(so); }
public static StObject FromParser(BinaryParser parser, int? hint = null) { var so = new StObject(); // hint, is how many bytes to parse if (hint != null) { // end hint hint = parser.Pos() + hint; } while (!parser.End(hint)) { var field = parser.ReadField(); if (field == Field.ObjectEndMarker) { break; } var sizeHint = field.IsVlEncoded ? parser.ReadVlLength() : (int?) null; var st = field.FromParser(parser, sizeHint); if (st == null) { throw new InvalidOperationException("Parsed " + field + " as null"); } so.Fields[field] = st; } return so; }
private static void SetCanonicalSigFlag(StObject so) { var flags = CanonicalSigFlag; if (so.Has(Field.Flags)) { flags |= so[Field.Flags]; } so[Field.Flags] = flags; }
public static StArray FromParser(BinaryParser parser, int?hint = null) { var stArray = new StArray(); while (!parser.End()) { var field = parser.ReadField(); if (field == Field.ArrayEndMarker) { break; } var outer = new StObject { [(StObjectField)field] = StObject.FromParser(parser) }; stArray.Add(outer); } return(stArray); }
public static StObject FromJson(JToken token, bool strict) { if (token.Type != JTokenType.Object) { throw new InvalidJsonException("{token} is not an object"); } var so = new StObject(); foreach (var pair in (JObject)token) { if (!Field.Values.Has(pair.Key)) { if (strict) { throw new InvalidJsonException($"unknown field {pair.Key}"); } continue; } var fieldForType = Field.Values[pair.Key]; var jsonForField = pair.Value; ISerializedType st; try { st = fieldForType.FromJson(jsonForField); } catch (Exception e) when(e is InvalidOperationException || e is FormatException || e is OverflowException || e is PrecisionException) { throw new InvalidJsonException($"Can't decode `{fieldForType}` " + $"from `{jsonForField}`", e); } so.Fields[fieldForType] = st; } return(so); }
public StObject ReadStObject() { return(StObject.FromParser(_parser)); }
public StObject ReadVlStObject() { return(StObject.FromParser(_parser, _parser.ReadVlLength())); }
public static StObject FromJson(JToken token, bool strict) { if (token.Type != JTokenType.Object) { throw new InvalidJsonException("{token} is not an object"); } var so = new StObject(); foreach (var pair in (JObject) token) { if (!Field.Values.Has(pair.Key)) { if (strict) { throw new InvalidJsonException($"unknown field {pair.Key}"); } continue; } var fieldForType = Field.Values[pair.Key]; var jsonForField = pair.Value; ISerializedType st; try { st = fieldForType.FromJson(jsonForField); } catch (Exception e) when (e is InvalidOperationException || e is FormatException || e is OverflowException || e is PrecisionException) { throw new InvalidJsonException($"Can't decode `{fieldForType}` " + $"from `{jsonForField}`", e); } so.Fields[fieldForType] = st; } return so; }