Commit 5cbcac4
Changed files (3)
pkg
serde
pkg/serde/io.go
@@ -5,10 +5,14 @@ import (
)
func From[T any](r io.Reader, mediaType MediaType) (T, error) {
- if mediaType == JSONAPI {
+ switch mediaType {
+ case JSONAPI:
return FromJSONAPI[T](r)
+ case YAML:
+ return FromYAML[T](r)
+ default:
+ return FromJSON[T](r)
}
- return FromJSON[T](r)
}
func To[T any](w io.Writer, item T, mediaType MediaType) error {
pkg/serde/io_test.go
@@ -99,6 +99,18 @@ func TestFrom(t *testing.T) {
assert.Equal(t, "my-key", results[0].Key)
assert.Equal(t, "my-value", results[0].Value)
})
+
+ t.Run("parses a single item from YAML data", func(t *testing.T) {
+ body := strings.NewReader(`key: "my-key"
+value: "my-value"
+`)
+
+ result, err := From[Example](body, YAML)
+
+ require.NoError(t, err)
+ assert.Equal(t, "my-key", result.Key)
+ assert.Equal(t, "my-value", result.Value)
+ })
}
func TestTo(t *testing.T) {
pkg/serde/yaml.go
@@ -9,3 +9,8 @@ import (
func ToYAML[T any](w io.Writer, item T) error {
return yaml.NewEncoder(w).Encode(item)
}
+
+func FromYAML[T any](reader io.Reader) (T, error) {
+ var item T
+ return item, yaml.NewDecoder(reader).Decode(&item)
+}