63 lines
1.4 KiB
Go
63 lines
1.4 KiB
Go
package schemamd
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/zclconf/go-cty/cty"
|
|
)
|
|
|
|
func WriteType(w io.Writer, ty cty.Type) error {
|
|
switch {
|
|
case ty == cty.DynamicPseudoType:
|
|
_, err := io.WriteString(w, "Dynamic")
|
|
return err
|
|
case ty.IsPrimitiveType():
|
|
switch ty {
|
|
case cty.String:
|
|
_, err := io.WriteString(w, "String")
|
|
return err
|
|
case cty.Bool:
|
|
_, err := io.WriteString(w, "Boolean")
|
|
return err
|
|
case cty.Number:
|
|
_, err := io.WriteString(w, "Number")
|
|
return err
|
|
}
|
|
return fmt.Errorf("unexpected primitive type %q", ty.FriendlyName())
|
|
case ty.IsCollectionType():
|
|
switch {
|
|
default:
|
|
return fmt.Errorf("unexpected collection type %q", ty.FriendlyName())
|
|
case ty.IsListType():
|
|
_, err := io.WriteString(w, "List of ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
case ty.IsSetType():
|
|
_, err := io.WriteString(w, "Set of ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
case ty.IsMapType():
|
|
_, err := io.WriteString(w, "Map of ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
err := WriteType(w, ty.ElementType())
|
|
if err != nil {
|
|
return fmt.Errorf("unable to write element type for %q: %w", ty.FriendlyName(), err)
|
|
}
|
|
return nil
|
|
case ty.IsTupleType():
|
|
// TODO: write additional type info?
|
|
_, err := io.WriteString(w, "Tuple")
|
|
return err
|
|
case ty.IsObjectType():
|
|
_, err := io.WriteString(w, "Object")
|
|
return err
|
|
}
|
|
return fmt.Errorf("unexpected type %q", ty.FriendlyName())
|
|
}
|