| 191 | } |
| 192 | |
| 193 | func craftMaterial(materialPath, materialKind string, logger *zerolog.Logger) (*v12.Attestation_Material, error) { |
| 194 | backend := &casclient.CASBackend{ |
| 195 | Name: "backend", |
| 196 | MaxSize: 0, |
| 197 | Uploader: nil, // Skip uploads |
| 198 | } |
| 199 | |
| 200 | // Explicit kind |
| 201 | if materialKind != "" { |
| 202 | kind, ok := v1.CraftingSchema_Material_MaterialType_value[materialKind] |
| 203 | if !ok { |
| 204 | return nil, fmt.Errorf("invalid material kind: %s", materialKind) |
| 205 | } |
| 206 | return craft(materialPath, v1.CraftingSchema_Material_MaterialType(kind), "material", backend, logger) |
| 207 | } |
| 208 | |
| 209 | // Auto-detect kind |
| 210 | for _, kind := range v1.CraftingMaterialInValidationOrder { |
| 211 | m, err := craft(materialPath, kind, "auto-detected-material", backend, logger) |
| 212 | if err == nil { |
| 213 | return m, nil |
| 214 | } |
| 215 | } |
| 216 | |
| 217 | return nil, fmt.Errorf("could not auto-detect material kind for: %s", materialPath) |
| 218 | } |
| 219 | |
| 220 | func craft(materialPath string, kind v1.CraftingSchema_Material_MaterialType, name string, backend *casclient.CASBackend, logger *zerolog.Logger) (*v12.Attestation_Material, error) { |
| 221 | materialSchema := &v1.CraftingSchema_Material{ |