import type { AnalysisContext, Node, NodeName } from '@hey-api/codegen-core'; import type { py } from '../../ts-python'; import type { MaybePyDsl } from '../base'; import { BinaryPyDsl } from '../expr/binary'; import type { BaseCtor, MixinCtor } from './types'; type Expr = NodeName | MaybePyDsl; export interface OperatorMethods extends Node { and(expr: Expr): BinaryPyDsl; div(expr: Expr): BinaryPyDsl; eq(expr: Expr): BinaryPyDsl; floordiv(expr: Expr): BinaryPyDsl; gt(expr: Expr): BinaryPyDsl; gte(expr: Expr): BinaryPyDsl; in_(expr: Expr): BinaryPyDsl; is(expr: Expr): BinaryPyDsl; isNot(expr: Expr): BinaryPyDsl; lt(expr: Expr): BinaryPyDsl; lte(expr: Expr): BinaryPyDsl; minus(expr: Expr): BinaryPyDsl; mod(expr: Expr): BinaryPyDsl; neq(expr: Expr): BinaryPyDsl; notIn(expr: Expr): BinaryPyDsl; or(expr: Expr): BinaryPyDsl; plus(expr: Expr): BinaryPyDsl; pow(expr: Expr): BinaryPyDsl; times(expr: Expr): BinaryPyDsl; } export function OperatorMixin>(Base: TBase) { abstract class Operator extends Base { override analyze(ctx: AnalysisContext): void { super.analyze(ctx); } protected and(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, 'and', expr as MaybePyDsl, ); } protected div(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '/', expr as MaybePyDsl, ); } protected eq(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '==', expr as MaybePyDsl, ); } protected floordiv(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '//', expr as MaybePyDsl, ); } protected gt(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '>', expr as MaybePyDsl, ); } protected gte(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '>=', expr as MaybePyDsl, ); } protected in_(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, 'in', expr as MaybePyDsl, ); } protected is(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, 'is', expr as MaybePyDsl, ); } protected isNot(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, 'is not', expr as MaybePyDsl, ); } protected lt(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '<', expr as MaybePyDsl, ); } protected lte(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '<=', expr as MaybePyDsl, ); } protected minus(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '-', expr as MaybePyDsl, ); } protected mod(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '%', expr as MaybePyDsl, ); } protected neq(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '!=', expr as MaybePyDsl, ); } protected notIn(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, 'not in', expr as MaybePyDsl, ); } protected or(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, 'or', expr as MaybePyDsl, ); } protected plus(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '+', expr as MaybePyDsl, ); } protected pow(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '**', expr as MaybePyDsl, ); } protected times(expr: Expr): BinaryPyDsl { return new BinaryPyDsl( this as unknown as MaybePyDsl, '*', expr as MaybePyDsl, ); } } return Operator as unknown as MixinCtor; }