(data []byte)
| 244 | } |
| 245 | |
| 246 | func jsonToReference(data []byte) (*plumbing.Reference, error) { |
| 247 | var refMap map[string]interface{} |
| 248 | if err := json.Unmarshal(data, &refMap); err != nil { |
| 249 | return nil, err |
| 250 | } |
| 251 | |
| 252 | name, ok := refMap["Name"].(string) |
| 253 | if !ok { |
| 254 | return nil, fmt.Errorf("invalid reference name") |
| 255 | } |
| 256 | |
| 257 | target, ok := refMap["Target"].(string) |
| 258 | if !ok { |
| 259 | return nil, fmt.Errorf("invalid reference target") |
| 260 | } |
| 261 | |
| 262 | refType, ok := refMap["Type"].(string) |
| 263 | if !ok { |
| 264 | return nil, fmt.Errorf("invalid reference type") |
| 265 | } |
| 266 | |
| 267 | hash, ok := refMap["Hash"].(string) |
| 268 | if refType == plumbing.HashReference.String() && !ok { |
| 269 | return nil, fmt.Errorf("invalid reference hash") |
| 270 | } |
| 271 | |
| 272 | var ref plumbing.Reference |
| 273 | switch refType { |
| 274 | case plumbing.SymbolicReference.String(): |
| 275 | ref = *plumbing.NewSymbolicReference(plumbing.ReferenceName(name), plumbing.ReferenceName(target)) |
| 276 | case plumbing.HashReference.String(): |
| 277 | ref = *plumbing.NewHashReference(plumbing.ReferenceName(name), plumbing.NewHash(hash)) |
| 278 | default: |
| 279 | return nil, fmt.Errorf("unsupported reference type") |
| 280 | } |
| 281 | |
| 282 | return &ref, nil |
| 283 | } |
no test coverage detected