const _Basic = S.transform(
S.Struct({ name: S.String }),
S.String,
{
decode: (obj) => obj.name,
encode: (name) => ({ name }),
},
)
function transformRarity<T extends S.Struct.Fields>(struct: S.Struct<T>) {
return S.transform(
S.Struct({
...struct.fields,
rarity: S.String,
color: S.String,
}),
{
strict: true,
decode: (data) => ({
...data,
rarity: data.rarity.name,
color: data.rarity.color,
}),
encode: (data) => data,
},
)(struct);
}
export const Agent = S.Struct({
id: S.String,
name: S.String,
description: StringWithDefault,
rarity: _Rarity,
market_hash_name: StringWithDefault,
collections: S.Array(S.partialWith(Collection, { exact: true })),
team: _Basic,
}).pipe(transformRarity)
const _Basic = S.transform(
S.Struct({ name: S.String }),
S.String,
{
decode: (obj) => obj.name,
encode: (name) => ({ name }),
},
)
function transformRarity<T extends S.Struct.Fields>(struct: S.Struct<T>) {
return S.transform(
S.Struct({
...struct.fields,
rarity: S.String,
color: S.String,
}),
{
strict: true,
decode: (data) => ({
...data,
rarity: data.rarity.name,
color: data.rarity.color,
}),
encode: (data) => data,
},
)(struct);
}
export const Agent = S.Struct({
id: S.String,
name: S.String,
description: StringWithDefault,
rarity: _Rarity,
market_hash_name: StringWithDefault,
collections: S.Array(S.partialWith(Collection, { exact: true })),
team: _Basic,
}).pipe(transformRarity)