lean4-code-actions
Version:
Refactorings and snippets for Lean 4
43 lines (33 loc) • 1.29 kB
text/typescript
import { BigNumber } from 'libs/utils/BigNumber/utils'
import { isEqualByD } from 'libs/utils/lodash'
import { getDuplicatesRefinement } from 'libs/utils/zod'
import { z } from 'zod'
import { NameSchema } from './Name'
/**
* Allows defining unit conversion (e.g. from km to m)
*
* @see QuantitySchema
*/
export const ConversionSchema = z.object({
from: NameSchema,
to: NameSchema,
multiplier: z.instanceof(BigNumber),
}).describe('Conversion')
export const ConversionsSchema = z.array(ConversionSchema)
.superRefine(getDuplicatesRefinement('Conversion', parseConversionUid))
export const ConversionUidSchema = ConversionSchema.pick({
from: true,
to: true,
})
export type Conversion = z.infer<typeof ConversionSchema>
export type ConversionUid = z.infer<typeof ConversionUidSchema>
export function parseConversion(conversion: Conversion): Conversion {
return ConversionSchema.parse(conversion)
}
export function parseConversions(conversions: Conversion[]): Conversion[] {
return ConversionsSchema.parse(conversions)
}
export function parseConversionUid(conversionUid: ConversionUid): ConversionUid {
return ConversionUidSchema.parse(conversionUid)
}
export const isEqualConversion = (a: Conversion) => (b: Conversion) => isEqualByD(a, b, parseConversionUid)