import json

struct Test {
	field MySumType
}

type MyInt = int
type MyString = string
type MySumType = MyString | int | string

fn test_alias_to_primitive() {
	mut test := Test{
		field: MyString('foo')
	}
	mut encoded := json.encode(test)
	assert dump(encoded) == '{"field":"foo"}'
	assert json.decode(Test, '{"field":	"foo"}')!.field == MySumType('foo')

	test = Test{
		field: 'foo'
	}
	encoded = json.encode(test)
	assert dump(encoded) == '{"field":"foo"}'
	assert json.decode(Test, '{"field":"foo"}')! == test

	test = Test{
		field: 1
	}
	encoded = json.encode(test)
	assert dump(encoded) == '{"field":1}'
	assert json.decode(Test, '{"field":1}')! == test

	mut test2 := MyString('foo')
	encoded = json.encode(test2)
	assert dump(encoded) == '"foo"'

	mut test3 := MyInt(1000)
	encoded = json.encode(test3)
	assert dump(encoded) == '1000'
}