(sctx *super.Context, t zType)
| 187 | type decoder map[int]super.Type |
| 188 | |
| 189 | func (d decoder) decodeType(sctx *super.Context, t zType) (super.Type, error) { |
| 190 | switch t := t.(type) { |
| 191 | case *zRecord: |
| 192 | typ, err := d.decodeTypeRecord(sctx, t) |
| 193 | d[t.ID] = typ |
| 194 | return typ, err |
| 195 | case *zArray: |
| 196 | inner, err := d.decodeType(sctx, t.Type) |
| 197 | if err != nil { |
| 198 | return nil, err |
| 199 | } |
| 200 | typ := sctx.LookupTypeArray(inner) |
| 201 | d[t.ID] = typ |
| 202 | return typ, nil |
| 203 | case *zSet: |
| 204 | inner, err := d.decodeType(sctx, t.Type) |
| 205 | if err != nil { |
| 206 | return nil, err |
| 207 | } |
| 208 | typ := sctx.LookupTypeSet(inner) |
| 209 | d[t.ID] = typ |
| 210 | return typ, nil |
| 211 | case *zUnion: |
| 212 | typ, err := d.decodeTypeUnion(sctx, t) |
| 213 | d[t.ID] = typ |
| 214 | return typ, err |
| 215 | case *zEnum: |
| 216 | typ, err := d.decodeTypeEnum(sctx, t) |
| 217 | d[t.ID] = typ |
| 218 | return typ, err |
| 219 | case *zMap: |
| 220 | typ, err := d.decodeTypeMap(sctx, t) |
| 221 | d[t.ID] = typ |
| 222 | return typ, err |
| 223 | case *zNamed: |
| 224 | inner, err := d.decodeType(sctx, t.Type) |
| 225 | if err != nil { |
| 226 | return nil, err |
| 227 | } |
| 228 | typ, err := sctx.LookupTypeNamed(t.Name, inner) |
| 229 | d[t.ID] = typ |
| 230 | return typ, err |
| 231 | case *zError: |
| 232 | inner, err := d.decodeType(sctx, t.Type) |
| 233 | if err != nil { |
| 234 | return nil, err |
| 235 | } |
| 236 | typ := sctx.LookupTypeError(inner) |
| 237 | d[t.ID] = typ |
| 238 | return typ, nil |
| 239 | case *zFusion: |
| 240 | inner, err := d.decodeType(sctx, t.Type) |
| 241 | if err != nil { |
| 242 | return nil, err |
| 243 | } |
| 244 | typ := sctx.LookupTypeFusion(inner) |
| 245 | d[t.ID] = typ |
| 246 | return typ, nil |
no test coverage detected