export type FieldMap = ['map', string, FieldType]; export type FieldRepeated = ['repeated', FieldType]; export type FieldWrapper = ['wrapper', string]; export type FieldType = string | Field | FieldMap | FieldRepeated | FieldWrapper; export type FieldItem = [number, string, FieldType, 0 | 1, string?]; export type Field = () => FieldItem[]; export type FieldGet> = T extends Field ? X : never; export type FieldEmpty = Record; export type Service, K extends Field> = { name: string; encode: T; decode: K; }; export type ServiceRequest> = T extends Service ? FieldGet : never; export type ServiceResponse> = T extends Service ? FieldGet : never; export type Values> = T[keyof T];