// Code generated by kaitai-struct-compiler from a .ksy source file. DO NOT EDIT. import ( "github.com/kaitai-io/kaitai_struct_go_runtime/kaitai" "bytes" "strconv" ) /** * A serialized PHP value, in the format used by PHP's built-in `serialize` and * `unserialize` functions. This format closely mirrors PHP's data model: * it supports all of PHP's scalar types (`NULL`, booleans, numbers, strings), * associative arrays, objects, and recursive data structures using references. * The only PHP values not supported by this format are *resources*, * which usually correspond to native file or connection handles and cannot be * meaningfully serialized. * * There is no official documentation for this data format; * this spec was created based on the PHP source code and the behavior of * `serialize`/`unserialize`. PHP makes no guarantees about compatibility of * serialized data between PHP versions, but in practice, the format has * remained fully backwards-compatible - values serialized by an older * PHP version can be unserialized on any newer PHP version. * This spec supports serialized values from PHP 7.3 or any earlier version. * @see Source * @see Source * @see Source * @see Source * @see Source */ type PhpSerializedValue_ValueType int const ( PhpSerializedValue_ValueType__CustomSerializedObject PhpSerializedValue_ValueType = 67 PhpSerializedValue_ValueType__Null PhpSerializedValue_ValueType = 78 PhpSerializedValue_ValueType__Object PhpSerializedValue_ValueType = 79 PhpSerializedValue_ValueType__VariableReference PhpSerializedValue_ValueType = 82 PhpSerializedValue_ValueType__Php6String PhpSerializedValue_ValueType = 83 PhpSerializedValue_ValueType__Array PhpSerializedValue_ValueType = 97 PhpSerializedValue_ValueType__Bool PhpSerializedValue_ValueType = 98 PhpSerializedValue_ValueType__Float PhpSerializedValue_ValueType = 100 PhpSerializedValue_ValueType__Int PhpSerializedValue_ValueType = 105 PhpSerializedValue_ValueType__Php3Object PhpSerializedValue_ValueType = 111 PhpSerializedValue_ValueType__ObjectReference PhpSerializedValue_ValueType = 114 PhpSerializedValue_ValueType__String PhpSerializedValue_ValueType = 115 ) type PhpSerializedValue_BoolValue int const ( PhpSerializedValue_BoolValue__False PhpSerializedValue_BoolValue = 48 PhpSerializedValue_BoolValue__True PhpSerializedValue_BoolValue = 49 ) type PhpSerializedValue struct { Type PhpSerializedValue_ValueType Contents interface{} _io *kaitai.Stream _root *PhpSerializedValue _parent interface{} } func NewPhpSerializedValue() *PhpSerializedValue { return &PhpSerializedValue{ } } func (this *PhpSerializedValue) Read(io *kaitai.Stream, parent interface{}, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp1, err := this._io.ReadU1() if err != nil { return err } this.Type = PhpSerializedValue_ValueType(tmp1) switch (this.Type) { case PhpSerializedValue_ValueType__CustomSerializedObject: tmp2 := NewPhpSerializedValue_CustomSerializedObjectContents() err = tmp2.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp2 case PhpSerializedValue_ValueType__Php3Object: tmp3 := NewPhpSerializedValue_Php3ObjectContents() err = tmp3.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp3 case PhpSerializedValue_ValueType__Object: tmp4 := NewPhpSerializedValue_ObjectContents() err = tmp4.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp4 case PhpSerializedValue_ValueType__VariableReference: tmp5 := NewPhpSerializedValue_IntContents() err = tmp5.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp5 case PhpSerializedValue_ValueType__Php6String: tmp6 := NewPhpSerializedValue_StringContents() err = tmp6.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp6 case PhpSerializedValue_ValueType__Float: tmp7 := NewPhpSerializedValue_FloatContents() err = tmp7.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp7 case PhpSerializedValue_ValueType__ObjectReference: tmp8 := NewPhpSerializedValue_IntContents() err = tmp8.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp8 case PhpSerializedValue_ValueType__Null: tmp9 := NewPhpSerializedValue_NullContents() err = tmp9.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp9 case PhpSerializedValue_ValueType__Bool: tmp10 := NewPhpSerializedValue_BoolContents() err = tmp10.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp10 case PhpSerializedValue_ValueType__Int: tmp11 := NewPhpSerializedValue_IntContents() err = tmp11.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp11 case PhpSerializedValue_ValueType__Array: tmp12 := NewPhpSerializedValue_ArrayContents() err = tmp12.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp12 case PhpSerializedValue_ValueType__String: tmp13 := NewPhpSerializedValue_StringContents() err = tmp13.Read(this._io, this, this._root) if err != nil { return err } this.Contents = tmp13 } return err } /** * A single-character code indicating the type of the serialized value. */ /** * The contents of the serialized value, which vary depending on the type. */ /** * A mapping (a sequence of key-value pairs) prefixed with its size. */ type PhpSerializedValue_CountPrefixedMapping struct { NumEntriesDec string OpeningBrace []byte Entries []*PhpSerializedValue_MappingEntry ClosingBrace []byte _io *kaitai.Stream _root *PhpSerializedValue _parent interface{} _f_numEntries bool numEntries int } func NewPhpSerializedValue_CountPrefixedMapping() *PhpSerializedValue_CountPrefixedMapping { return &PhpSerializedValue_CountPrefixedMapping{ } } func (this *PhpSerializedValue_CountPrefixedMapping) Read(io *kaitai.Stream, parent interface{}, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp14, err := this._io.ReadBytesTerm(58, false, true, true) if err != nil { return err } this.NumEntriesDec = string(tmp14) tmp15, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp15 = tmp15 this.OpeningBrace = tmp15 if !(bytes.Equal(this.OpeningBrace, []uint8{123})) { return kaitai.NewValidationNotEqualError([]uint8{123}, this.OpeningBrace, this._io, "/types/count_prefixed_mapping/seq/1") } tmp16, err := this.NumEntries() if err != nil { return err } for i := 0; i < int(tmp16); i++ { _ = i tmp17 := NewPhpSerializedValue_MappingEntry() err = tmp17.Read(this._io, this, this._root) if err != nil { return err } this.Entries = append(this.Entries, tmp17) } tmp18, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp18 = tmp18 this.ClosingBrace = tmp18 if !(bytes.Equal(this.ClosingBrace, []uint8{125})) { return kaitai.NewValidationNotEqualError([]uint8{125}, this.ClosingBrace, this._io, "/types/count_prefixed_mapping/seq/3") } return err } /** * The number of key-value pairs in the mapping, parsed as an integer. */ func (this *PhpSerializedValue_CountPrefixedMapping) NumEntries() (v int, err error) { if (this._f_numEntries) { return this.numEntries, nil } tmp19, err := strconv.ParseInt(this.NumEntriesDec, 10, 0) if err != nil { return 0, err } this.numEntries = int(tmp19) this._f_numEntries = true return this.numEntries, nil } /** * The number of key-value pairs in the mapping, in ASCII decimal. */ /** * The key-value pairs contained in the mapping. */ /** * The contents of a floating-point value. */ type PhpSerializedValue_FloatContents struct { Colon []byte ValueDec string _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue } func NewPhpSerializedValue_FloatContents() *PhpSerializedValue_FloatContents { return &PhpSerializedValue_FloatContents{ } } func (this *PhpSerializedValue_FloatContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp20, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp20 = tmp20 this.Colon = tmp20 if !(bytes.Equal(this.Colon, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon, this._io, "/types/float_contents/seq/0") } tmp21, err := this._io.ReadBytesTerm(59, false, true, true) if err != nil { return err } this.ValueDec = string(tmp21) return err } /** * The value of the `float`, in ASCII decimal, as generated by PHP's * usual double-to-string conversion. In particular, this means that: * * * A decimal point may not be included (for integral numbers) * * The number may use exponent notation (e. g. `1.0E+16`) * * Positive and negative infinity are represented as `INF` * and `-INF`, respectively * * Not-a-number is represented as `NAN` */ /** * A quoted string prefixed with its length. * * Despite the quotes surrounding the string data, it can contain * arbitrary bytes, which are never escaped in any way. * This does not cause any ambiguities when parsing - the bounds of * the string are determined only by the length field, not by the quotes. */ type PhpSerializedValue_LengthPrefixedQuotedString struct { LenDataDec string OpeningQuote []byte Data []byte ClosingQuote []byte _io *kaitai.Stream _root *PhpSerializedValue _parent interface{} _f_lenData bool lenData int } func NewPhpSerializedValue_LengthPrefixedQuotedString() *PhpSerializedValue_LengthPrefixedQuotedString { return &PhpSerializedValue_LengthPrefixedQuotedString{ } } func (this *PhpSerializedValue_LengthPrefixedQuotedString) Read(io *kaitai.Stream, parent interface{}, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp22, err := this._io.ReadBytesTerm(58, false, true, true) if err != nil { return err } this.LenDataDec = string(tmp22) tmp23, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp23 = tmp23 this.OpeningQuote = tmp23 if !(bytes.Equal(this.OpeningQuote, []uint8{34})) { return kaitai.NewValidationNotEqualError([]uint8{34}, this.OpeningQuote, this._io, "/types/length_prefixed_quoted_string/seq/1") } tmp24, err := this.LenData() if err != nil { return err } tmp25, err := this._io.ReadBytes(int(tmp24)) if err != nil { return err } tmp25 = tmp25 this.Data = tmp25 tmp26, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp26 = tmp26 this.ClosingQuote = tmp26 if !(bytes.Equal(this.ClosingQuote, []uint8{34})) { return kaitai.NewValidationNotEqualError([]uint8{34}, this.ClosingQuote, this._io, "/types/length_prefixed_quoted_string/seq/3") } return err } /** * The length of the string's contents in bytes, parsed as an integer. * The quotes are not counted in this size number. */ func (this *PhpSerializedValue_LengthPrefixedQuotedString) LenData() (v int, err error) { if (this._f_lenData) { return this.lenData, nil } tmp27, err := strconv.ParseInt(this.LenDataDec, 10, 0) if err != nil { return 0, err } this.lenData = int(tmp27) this._f_lenData = true return this.lenData, nil } /** * The length of the string's data in bytes, in ASCII decimal. * The quotes are not counted in this length number. */ /** * The data contained in the string. The quotes are not included. */ /** * The contents of an object value serialized in the default format. * Unlike its PHP 3 counterpart, it contains a class name. */ type PhpSerializedValue_ObjectContents struct { Colon1 []byte ClassName *PhpSerializedValue_LengthPrefixedQuotedString Colon2 []byte Properties *PhpSerializedValue_CountPrefixedMapping _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue } func NewPhpSerializedValue_ObjectContents() *PhpSerializedValue_ObjectContents { return &PhpSerializedValue_ObjectContents{ } } func (this *PhpSerializedValue_ObjectContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp28, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp28 = tmp28 this.Colon1 = tmp28 if !(bytes.Equal(this.Colon1, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon1, this._io, "/types/object_contents/seq/0") } tmp29 := NewPhpSerializedValue_LengthPrefixedQuotedString() err = tmp29.Read(this._io, this, this._root) if err != nil { return err } this.ClassName = tmp29 tmp30, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp30 = tmp30 this.Colon2 = tmp30 if !(bytes.Equal(this.Colon2, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon2, this._io, "/types/object_contents/seq/2") } tmp31 := NewPhpSerializedValue_CountPrefixedMapping() err = tmp31.Read(this._io, this, this._root) if err != nil { return err } this.Properties = tmp31 return err } /** * The name of the object's class. */ /** * The object's properties. Keys ust be of type `string`, * values may have any type. */ /** * The contents of an array value. */ type PhpSerializedValue_ArrayContents struct { Colon []byte Elements *PhpSerializedValue_CountPrefixedMapping _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue } func NewPhpSerializedValue_ArrayContents() *PhpSerializedValue_ArrayContents { return &PhpSerializedValue_ArrayContents{ } } func (this *PhpSerializedValue_ArrayContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp32, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp32 = tmp32 this.Colon = tmp32 if !(bytes.Equal(this.Colon, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon, this._io, "/types/array_contents/seq/0") } tmp33 := NewPhpSerializedValue_CountPrefixedMapping() err = tmp33.Read(this._io, this, this._root) if err != nil { return err } this.Elements = tmp33 return err } /** * The array's elements. Keys must be of type `int` or `string`, * values may have any type. */ /** * The contents of an object value that implements a custom * serialized format using `Serializable`. */ type PhpSerializedValue_CustomSerializedObjectContents struct { Colon1 []byte ClassName *PhpSerializedValue_LengthPrefixedQuotedString Colon2 []byte LenDataDec string OpeningBrace []byte Data []byte ClosingQuote []byte _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue _f_lenData bool lenData int } func NewPhpSerializedValue_CustomSerializedObjectContents() *PhpSerializedValue_CustomSerializedObjectContents { return &PhpSerializedValue_CustomSerializedObjectContents{ } } func (this *PhpSerializedValue_CustomSerializedObjectContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp34, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp34 = tmp34 this.Colon1 = tmp34 if !(bytes.Equal(this.Colon1, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon1, this._io, "/types/custom_serialized_object_contents/seq/0") } tmp35 := NewPhpSerializedValue_LengthPrefixedQuotedString() err = tmp35.Read(this._io, this, this._root) if err != nil { return err } this.ClassName = tmp35 tmp36, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp36 = tmp36 this.Colon2 = tmp36 if !(bytes.Equal(this.Colon2, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon2, this._io, "/types/custom_serialized_object_contents/seq/2") } tmp37, err := this._io.ReadBytesTerm(58, false, true, true) if err != nil { return err } this.LenDataDec = string(tmp37) tmp38, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp38 = tmp38 this.OpeningBrace = tmp38 if !(bytes.Equal(this.OpeningBrace, []uint8{123})) { return kaitai.NewValidationNotEqualError([]uint8{123}, this.OpeningBrace, this._io, "/types/custom_serialized_object_contents/seq/4") } tmp39, err := this.LenData() if err != nil { return err } tmp40, err := this._io.ReadBytes(int(tmp39)) if err != nil { return err } tmp40 = tmp40 this.Data = tmp40 tmp41, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp41 = tmp41 this.ClosingQuote = tmp41 if !(bytes.Equal(this.ClosingQuote, []uint8{125})) { return kaitai.NewValidationNotEqualError([]uint8{125}, this.ClosingQuote, this._io, "/types/custom_serialized_object_contents/seq/6") } return err } /** * The length of the serialized data in bytes, parsed as an integer. * The braces are not counted in this length number. */ func (this *PhpSerializedValue_CustomSerializedObjectContents) LenData() (v int, err error) { if (this._f_lenData) { return this.lenData, nil } tmp42, err := strconv.ParseInt(this.LenDataDec, 10, 0) if err != nil { return 0, err } this.lenData = int(tmp42) this._f_lenData = true return this.lenData, nil } /** * The name of the object's class. */ /** * The length of the serialized data in bytes, in ASCII decimal. * The braces are not counted in this size number. */ /** * The custom serialized data. The braces are not included. * * Although the surrounding braces make it look like a regular * serialized object, this field is actually more similar to a string: * it can contain arbitrary data that is not required to follow * any common structure. */ /** * The contents of a null value (`value_type::null`). This structure * contains no actual data, since there is only a single `NULL` value. */ type PhpSerializedValue_NullContents struct { Semicolon []byte _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue } func NewPhpSerializedValue_NullContents() *PhpSerializedValue_NullContents { return &PhpSerializedValue_NullContents{ } } func (this *PhpSerializedValue_NullContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp43, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp43 = tmp43 this.Semicolon = tmp43 if !(bytes.Equal(this.Semicolon, []uint8{59})) { return kaitai.NewValidationNotEqualError([]uint8{59}, this.Semicolon, this._io, "/types/null_contents/seq/0") } return err } /** * The contents of a PHP 3 object value. Unlike its counterpart in PHP 4 * and above, it does not contain a class name. */ type PhpSerializedValue_Php3ObjectContents struct { Colon []byte Properties *PhpSerializedValue_CountPrefixedMapping _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue } func NewPhpSerializedValue_Php3ObjectContents() *PhpSerializedValue_Php3ObjectContents { return &PhpSerializedValue_Php3ObjectContents{ } } func (this *PhpSerializedValue_Php3ObjectContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp44, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp44 = tmp44 this.Colon = tmp44 if !(bytes.Equal(this.Colon, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon, this._io, "/types/php_3_object_contents/seq/0") } tmp45 := NewPhpSerializedValue_CountPrefixedMapping() err = tmp45.Read(this._io, this, this._root) if err != nil { return err } this.Properties = tmp45 return err } /** * The object's properties. Keys must be of type `string`, * values may have any type. */ /** * The contents of a boolean value (`value_type::bool`). */ type PhpSerializedValue_BoolContents struct { Colon []byte ValueDec PhpSerializedValue_BoolValue Semicolon []byte _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue _f_value bool value bool } func NewPhpSerializedValue_BoolContents() *PhpSerializedValue_BoolContents { return &PhpSerializedValue_BoolContents{ } } func (this *PhpSerializedValue_BoolContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp46, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp46 = tmp46 this.Colon = tmp46 if !(bytes.Equal(this.Colon, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon, this._io, "/types/bool_contents/seq/0") } tmp47, err := this._io.ReadU1() if err != nil { return err } this.ValueDec = PhpSerializedValue_BoolValue(tmp47) tmp48, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp48 = tmp48 this.Semicolon = tmp48 if !(bytes.Equal(this.Semicolon, []uint8{59})) { return kaitai.NewValidationNotEqualError([]uint8{59}, this.Semicolon, this._io, "/types/bool_contents/seq/2") } return err } /** * The value of the `bool`, parsed as a boolean. */ func (this *PhpSerializedValue_BoolContents) Value() (v bool, err error) { if (this._f_value) { return this.value, nil } this.value = bool(this.ValueDec == PhpSerializedValue_BoolValue__True) this._f_value = true return this.value, nil } /** * The value of the `bool`: `0` for `false` or `1` for `true`. */ /** * The contents of a string value. * * Note: PHP strings can contain arbitrary byte sequences. * They are not necessarily valid text in any specific encoding. */ type PhpSerializedValue_StringContents struct { Colon []byte String *PhpSerializedValue_LengthPrefixedQuotedString Semicolon []byte _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue _f_value bool value []byte } func NewPhpSerializedValue_StringContents() *PhpSerializedValue_StringContents { return &PhpSerializedValue_StringContents{ } } func (this *PhpSerializedValue_StringContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp49, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp49 = tmp49 this.Colon = tmp49 if !(bytes.Equal(this.Colon, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon, this._io, "/types/string_contents/seq/0") } tmp50 := NewPhpSerializedValue_LengthPrefixedQuotedString() err = tmp50.Read(this._io, this, this._root) if err != nil { return err } this.String = tmp50 tmp51, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp51 = tmp51 this.Semicolon = tmp51 if !(bytes.Equal(this.Semicolon, []uint8{59})) { return kaitai.NewValidationNotEqualError([]uint8{59}, this.Semicolon, this._io, "/types/string_contents/seq/2") } return err } /** * The value of the string, as a byte array. */ func (this *PhpSerializedValue_StringContents) Value() (v []byte, err error) { if (this._f_value) { return this.value, nil } this.value = []byte(this.String.Data) this._f_value = true return this.value, nil } /** * The contents of an integer-like value: * either an actual integer (`value_type::int`) or a reference * (`value_type::variable_reference`, `value_type::object_reference`). */ type PhpSerializedValue_IntContents struct { Colon []byte ValueDec string _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue _f_value bool value int } func NewPhpSerializedValue_IntContents() *PhpSerializedValue_IntContents { return &PhpSerializedValue_IntContents{ } } func (this *PhpSerializedValue_IntContents) Read(io *kaitai.Stream, parent *PhpSerializedValue, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp52, err := this._io.ReadBytes(int(1)) if err != nil { return err } tmp52 = tmp52 this.Colon = tmp52 if !(bytes.Equal(this.Colon, []uint8{58})) { return kaitai.NewValidationNotEqualError([]uint8{58}, this.Colon, this._io, "/types/int_contents/seq/0") } tmp53, err := this._io.ReadBytesTerm(59, false, true, true) if err != nil { return err } this.ValueDec = string(tmp53) return err } /** * The value of the `int`, parsed as an integer. */ func (this *PhpSerializedValue_IntContents) Value() (v int, err error) { if (this._f_value) { return this.value, nil } tmp54, err := strconv.ParseInt(this.ValueDec, 10, 0) if err != nil { return 0, err } this.value = int(tmp54) this._f_value = true return this.value, nil } /** * The value of the `int`, in ASCII decimal. */ /** * A mapping entry consisting of a key and a value. */ type PhpSerializedValue_MappingEntry struct { Key *PhpSerializedValue Value *PhpSerializedValue _io *kaitai.Stream _root *PhpSerializedValue _parent *PhpSerializedValue_CountPrefixedMapping } func NewPhpSerializedValue_MappingEntry() *PhpSerializedValue_MappingEntry { return &PhpSerializedValue_MappingEntry{ } } func (this *PhpSerializedValue_MappingEntry) Read(io *kaitai.Stream, parent *PhpSerializedValue_CountPrefixedMapping, root *PhpSerializedValue) (err error) { this._io = io this._parent = parent this._root = root tmp55 := NewPhpSerializedValue() err = tmp55.Read(this._io, this, nil) if err != nil { return err } this.Key = tmp55 tmp56 := NewPhpSerializedValue() err = tmp56.Read(this._io, this, nil) if err != nil { return err } this.Value = tmp56 return err } /** * The key of the entry. */ /** * The value of the entry. */