const transformRarity = <
A extends {
readonly rarity: {
readonly color: string;
readonly name: string;
};
},
I,
R
>(
schema: S.Schema<A, I, R>
) => {
const ast = schema.pipe(S.typeSchema, S.omit("rarity")).ast
const Transformed = S.Struct({
...ast,
rarity: S.String,
color: S.String,
});
return S.transform(
schema,
Transformed,
{
decode: ({ rarity, ...data }) => ({
...data,
rarity: rarity.name,
color: rarity.color,
}),
encode: ({ rarity, color, ...rest }) => {
const encoded: A = {
...rest,
rarity: {
name: rarity,
color,
},
};
return encoded;
},
strict: true,
}
).pipe(S.asSchema);
};
const transformRarity = <
A extends {
readonly rarity: {
readonly color: string;
readonly name: string;
};
},
I,
R
>(
schema: S.Schema<A, I, R>
) => {
const ast = schema.pipe(S.typeSchema, S.omit("rarity")).ast
const Transformed = S.Struct({
...ast,
rarity: S.String,
color: S.String,
});
return S.transform(
schema,
Transformed,
{
decode: ({ rarity, ...data }) => ({
...data,
rarity: rarity.name,
color: rarity.color,
}),
encode: ({ rarity, color, ...rest }) => {
const encoded: A = {
...rest,
rarity: {
name: rarity,
color,
},
};
return encoded;
},
strict: true,
}
).pipe(S.asSchema);
};