export function oneOf{{className nativeType.parentType}}FromRequest(name: string, value: any): {{nativeType}} {
	{{#if discriminator}}
	const discriminatorValue = value.{{discriminator.name}}
	switch (value.{{discriminator.name}}) {
		{{#each discriminator.references}}
		case {{{literalValue}}}:
			return {{>frag/fromRequest schema prefix=''}}(name, value)
		{{/each}}
	}

	throw `Invalid value for ${name}: didn't contain a known discriminator value: ${discriminatorValue}`
	{{else}}
	const errors: any[] = []
	{{#each composes}}
	try {
		return {{>frag/fromRequest . prefix=''}}(name, value as {{nativeType}})
	} catch (error) {
		errors.push(error)
	}
	{{/each}}
	
	throw `Failed to parse request for any member of ${name}: ${errors.join('\n')}`
	{{/if}}
}

export function oneOf{{className nativeType.parentType}}ToResponse(name: string, value: {{nativeType}}): ToResponse<{{nativeType}}> {
	{{#if discriminator}}
	const discriminatorValue = value.{{discriminator.serializedName}}
	switch (discriminatorValue) {
		{{#each discriminator.references}}
		case {{{literalValue}}}:
			return {{>frag/toResponse schema prefix=''}}(name, value)
		{{/each}}
	}

	throw `Invalid value for ${name}: didn't contain a known discriminator value: ${discriminatorValue}`
	{{else}}
	const errors: any[] = []
	{{#each composes}}
	try {
		return {{>frag/toResponse . prefix=''}}(name, value as {{nativeType}})
	} catch (error) {
		errors.push(error)
	}
	{{/each}}

	throw `Failed to create response for any member of ${name}: ${errors.join('\n')}`
	{{/if}}
}
{{>nestedValidation}}
