{{- $proxy := .}}{{$sheetProxy := $proxy.SheetProxy -}}{{- $ctx := $sheetProxy.ProtoCtx -}}
{{- $clsName := $proxy.ClassName}}{{$fields := $proxy.GetFields -}}
//------------------------------------------------------------------------------
// <auto-generated>
//     This code was auto-generated by ExcelExporter
//     version 2.0
//     from https://github.com/xuzhuoxi/ExcelExporter 
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

package {{$proxy.Namespace}}

// @auth {AUTHOR} {NowTimeStr}

// @description {{$proxy.ClassRemark}}
type I{{$clsName}} interface {
    // ProtoId
    ProtoId() {{$proxy.ProtoIdDataType}}
    {{- range $index, $value := $fields}}
    // @remark {{$value.Remark}}
    // @return {{$value.LangType}}
    Get{{ToUpperCamelCase $value.Name}}() {{if $value.IsCustomType}}*{{end}}{{$value.LangType}}
    {{- end}}
}

// @description {{$proxy.ClassRemark}}
type {{$clsName}} struct {
    // 以下为属性声明
    {{- range $index, $value := $fields}}
    //  {{$value.Remark}}
    {{ToLowerCamelCase $value.Name}} {{if $value.IsCustomType}}*{{end}}{{$value.LangType}}
    {{- end}}
}

// 接口实现
func (o *{{$clsName}}) ProtoId() {{$proxy.ProtoIdDataType}} {
	return {{$proxy.ProtoId}}
}

{{- range $index, $value := $fields}}
// @remark {{$value.Remark}}
// @return {{$value.LangType}}
func (o *{{$clsName}}) Get{{ToUpperCamelCase $value.Name}}() {{if $value.IsCustomType}}*{{end}}{{$value.LangType}} {
	return o.{{ToLowerCamelCase $value.Name}}
}
{{- end}}

// 以下为解释数据方法 --------------

// Json数据解释
func (o *{{$clsName}}) FromJsonOverride(proxy IJsonReaderProxy) {
    // 以下为从 Json数据代理 中解释出字段数据
    {{- range $index, $value := $fields}}
      {{- if $value.IsCustomType}}
    o.{{ToLowerCamelCase $value.Name}} = New{{$clsName}}FromJson(data.{{$value.Name}})
      {{- else}}{{$define := $value.LangTypeDefine}}
    o.{{ToLowerCamelCase $value.Name}} = proxy.{{$define.GetGetOperate "json"}}("{{$value.Name}}")
      {{- end}}
    {{- end}}
}

// Yaml数据解释
func (o *{{$clsName}}) FromYamlOverride(proxy IYamlReaderProxy) {
	// 以下为从 Yaml数据代理 中解释出字段数据
    {{- range $index, $value := $fields}}
      {{- if $value.IsCustomType}}
    o.{{ToLowerCamelCase $value.Name}} = New{{$clsName}}FromYaml(data.{{$value.Name}})
      {{- else}}{{$define := $value.LangTypeDefine}}
    o.{{ToLowerCamelCase $value.Name}} = proxy.{{$define.GetGetOperate "yaml"}}("{{$value.Name}}")
      {{- end}}
    {{- end}}
}

// 二进制数据解释
func (o *{{$clsName}}) FromBinaryOverride(proxy IBinaryReaderProxy) {
	// 以下为从 二进制数据代理 中解释出字段数据
    {{- range $index, $value := $fields}}
      {{- if $value.IsCustomType}}
    o.{{ToLowerCamelCase $value.Name}} = New{{$clsName}}FromBinary(data.{{$value.Name}})
      {{- else}}{{$define := $value.LangTypeDefine}}
    o.{{ToLowerCamelCase $value.Name}} = proxy.{{$define.GetGetOperate "bin"}}()
      {{- end}}
    {{- end}}
}

// 以下为静态实例化 --------------

func New{{$clsName}}FromJson(data string) *{{$clsName}} {
    rs := &{{$clsName}}{}
    rs.FromJsonOverride(data)
    return rs
}

func New{{$clsName}}FromYaml(data string) *{{$clsName}} {
    rs := &{{$clsName}}{}
    rs.FromYamlOverride(data)
    return rs
}

func New{{$clsName}}FromBinary(proxy IBinaryReaderProxy) *{{$clsName}} {
    rs := &{{$clsName}}{}
    rs.FromBinaryOverride(proxy)
    return rs
}