//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

package cfg;


import "errors"

type TestTestRef struct {
    Id int32
    X1 int32
    X12 int32
    X2 int32
    X3 int32
    X4 int32
    A1 []int32
    A2 []int32
    B1 []int32
    B2 []int32
    C1 []int32
    C2 []int32
    D1 map[int32]int32
    D2 map[int32]int32
    E1 int32
    E2 int64
    E3 string
    F1 int32
    F2 int64
    F3 string
    S1 interface{}
}

const TypeId_TestTestRef = -543222491

func (*TestTestRef) GetTypeId() int32 {
    return -543222491
}

func NewTestTestRef(_buf map[string]interface{}) (_v *TestTestRef, err error) {
    _v = &TestTestRef{}
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["id"].(float64); !_ok_ { err = errors.New("id error"); return }; _v.Id = int32(_tempNum_) }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["x1"].(float64); !_ok_ { err = errors.New("x1 error"); return }; _v.X1 = int32(_tempNum_) }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["x1_2"].(float64); !_ok_ { err = errors.New("x1_2 error"); return }; _v.X12 = int32(_tempNum_) }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["x2"].(float64); !_ok_ { err = errors.New("x2 error"); return }; _v.X2 = int32(_tempNum_) }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["x3"].(float64); !_ok_ { err = errors.New("x3 error"); return }; _v.X3 = int32(_tempNum_) }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["x4"].(float64); !_ok_ { err = errors.New("x4 error"); return }; _v.X4 = int32(_tempNum_) }
     {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["a1"].([]interface{}); !_ok_ { err = errors.New("a1 error"); return }
    
                    _v.A1 = make([]int32, 0, len(_arr_))
                    
                    for _, _e_ := range _arr_ {
                        var _list_v_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
                        _v.A1 = append(_v.A1, _list_v_)
                    }
                }

     {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["a2"].([]interface{}); !_ok_ { err = errors.New("a2 error"); return }
    
                    _v.A2 = make([]int32, 0, len(_arr_))
                    
                    for _, _e_ := range _arr_ {
                        var _list_v_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
                        _v.A2 = append(_v.A2, _list_v_)
                    }
                }

     {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["b1"].([]interface{}); !_ok_ { err = errors.New("b1 error"); return }
    
                    _v.B1 = make([]int32, 0, len(_arr_))
                    
                    for _, _e_ := range _arr_ {
                        var _list_v_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
                        _v.B1 = append(_v.B1, _list_v_)
                    }
                }

     {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["b2"].([]interface{}); !_ok_ { err = errors.New("b2 error"); return }
    
                    _v.B2 = make([]int32, 0, len(_arr_))
                    
                    for _, _e_ := range _arr_ {
                        var _list_v_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
                        _v.B2 = append(_v.B2, _list_v_)
                    }
                }

     {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["c1"].([]interface{}); !_ok_ { err = errors.New("c1 error"); return }
    
                    _v.C1 = make([]int32, 0, len(_arr_))
                    
                    for _, _e_ := range _arr_ {
                        var _list_v_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
                        _v.C1 = append(_v.C1, _list_v_)
                    }
                }

     {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["c2"].([]interface{}); !_ok_ { err = errors.New("c2 error"); return }
    
                    _v.C2 = make([]int32, 0, len(_arr_))
                    
                    for _, _e_ := range _arr_ {
                        var _list_v_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _e_.(float64); !_ok_ { err = errors.New("_list_v_ error"); return }; _list_v_ = int32(_x_) }
                        _v.C2 = append(_v.C2, _list_v_)
                    }
                }

    {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["d1"].([]interface{}); !_ok_ { err = errors.New("d1 error"); return }
    
                    _v.D1 = make(map[int32]int32)
                    
                    for _, _e_ := range _arr_ {
                        var _kv_ []interface{}
                        if _kv_, _ok_ = _e_.([]interface{}); !_ok_ || len(_kv_) != 2 { err = errors.New("d1 error"); return }
                        var _key_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _kv_[0].(float64); !_ok_ { err = errors.New("_key_ error"); return }; _key_ = int32(_x_) }
                        var _value_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _kv_[1].(float64); !_ok_ { err = errors.New("_value_ error"); return }; _value_ = int32(_x_) }
                        _v.D1[_key_] = _value_
                    }
                    }
    {
                    var _arr_ []interface{}
                    var _ok_ bool
                    if _arr_, _ok_ = _buf["d2"].([]interface{}); !_ok_ { err = errors.New("d2 error"); return }
    
                    _v.D2 = make(map[int32]int32)
                    
                    for _, _e_ := range _arr_ {
                        var _kv_ []interface{}
                        if _kv_, _ok_ = _e_.([]interface{}); !_ok_ || len(_kv_) != 2 { err = errors.New("d2 error"); return }
                        var _key_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _kv_[0].(float64); !_ok_ { err = errors.New("_key_ error"); return }; _key_ = int32(_x_) }
                        var _value_ int32
                        { var _ok_ bool; var _x_ float64; if _x_, _ok_ = _kv_[1].(float64); !_ok_ { err = errors.New("_value_ error"); return }; _value_ = int32(_x_) }
                        _v.D2[_key_] = _value_
                    }
                    }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["e1"].(float64); !_ok_ { err = errors.New("e1 error"); return }; _v.E1 = int32(_tempNum_) }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["e2"].(float64); !_ok_ { err = errors.New("e2 error"); return }; _v.E2 = int64(_tempNum_) }
    { var _ok_ bool; if _v.E3, _ok_ = _buf["e3"].(string); !_ok_ { err = errors.New("e3 error"); return } }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["f1"].(float64); !_ok_ { err = errors.New("f1 error"); return }; _v.F1 = int32(_tempNum_) }
    { var _ok_ bool; var _tempNum_ float64; if _tempNum_, _ok_ = _buf["f2"].(float64); !_ok_ { err = errors.New("f2 error"); return }; _v.F2 = int64(_tempNum_) }
    { var _ok_ bool; if _v.F3, _ok_ = _buf["f3"].(string); !_ok_ { err = errors.New("f3 error"); return } }
    { var _ok_ bool; var _x_ map[string]interface{}; if _x_, _ok_ = _buf["s1"].(map[string]interface{}); !_ok_ { err = errors.New("s1 error"); return }; if _v.S1, err = NewTestRefDynamicBase(_x_); err != nil { return } }
    return
}