fork of hey-api/openapi-ts because I need some additional things
1import type { AnalysisContext, Node, NodeName } from '@hey-api/codegen-core';
2
3import type { py } from '../../ts-python';
4import type { MaybePyDsl } from '../base';
5import { BinaryPyDsl } from '../expr/binary';
6import type { BaseCtor, MixinCtor } from './types';
7
8type Expr = NodeName | MaybePyDsl<py.Expression>;
9
10export interface OperatorMethods extends Node {
11 and(expr: Expr): BinaryPyDsl;
12 div(expr: Expr): BinaryPyDsl;
13 eq(expr: Expr): BinaryPyDsl;
14 floordiv(expr: Expr): BinaryPyDsl;
15 gt(expr: Expr): BinaryPyDsl;
16 gte(expr: Expr): BinaryPyDsl;
17 in_(expr: Expr): BinaryPyDsl;
18 is(expr: Expr): BinaryPyDsl;
19 isNot(expr: Expr): BinaryPyDsl;
20 lt(expr: Expr): BinaryPyDsl;
21 lte(expr: Expr): BinaryPyDsl;
22 minus(expr: Expr): BinaryPyDsl;
23 mod(expr: Expr): BinaryPyDsl;
24 neq(expr: Expr): BinaryPyDsl;
25 notIn(expr: Expr): BinaryPyDsl;
26 or(expr: Expr): BinaryPyDsl;
27 plus(expr: Expr): BinaryPyDsl;
28 pow(expr: Expr): BinaryPyDsl;
29 times(expr: Expr): BinaryPyDsl;
30}
31
32export function OperatorMixin<T extends py.Expression, TBase extends BaseCtor<T>>(Base: TBase) {
33 abstract class Operator extends Base {
34 override analyze(ctx: AnalysisContext): void {
35 super.analyze(ctx);
36 }
37
38 protected and(expr: Expr): BinaryPyDsl {
39 return new BinaryPyDsl(
40 this as unknown as MaybePyDsl<py.Expression>,
41 'and',
42 expr as MaybePyDsl<py.Expression>,
43 );
44 }
45
46 protected div(expr: Expr): BinaryPyDsl {
47 return new BinaryPyDsl(
48 this as unknown as MaybePyDsl<py.Expression>,
49 '/',
50 expr as MaybePyDsl<py.Expression>,
51 );
52 }
53
54 protected eq(expr: Expr): BinaryPyDsl {
55 return new BinaryPyDsl(
56 this as unknown as MaybePyDsl<py.Expression>,
57 '==',
58 expr as MaybePyDsl<py.Expression>,
59 );
60 }
61
62 protected floordiv(expr: Expr): BinaryPyDsl {
63 return new BinaryPyDsl(
64 this as unknown as MaybePyDsl<py.Expression>,
65 '//',
66 expr as MaybePyDsl<py.Expression>,
67 );
68 }
69
70 protected gt(expr: Expr): BinaryPyDsl {
71 return new BinaryPyDsl(
72 this as unknown as MaybePyDsl<py.Expression>,
73 '>',
74 expr as MaybePyDsl<py.Expression>,
75 );
76 }
77
78 protected gte(expr: Expr): BinaryPyDsl {
79 return new BinaryPyDsl(
80 this as unknown as MaybePyDsl<py.Expression>,
81 '>=',
82 expr as MaybePyDsl<py.Expression>,
83 );
84 }
85
86 protected in_(expr: Expr): BinaryPyDsl {
87 return new BinaryPyDsl(
88 this as unknown as MaybePyDsl<py.Expression>,
89 'in',
90 expr as MaybePyDsl<py.Expression>,
91 );
92 }
93
94 protected is(expr: Expr): BinaryPyDsl {
95 return new BinaryPyDsl(
96 this as unknown as MaybePyDsl<py.Expression>,
97 'is',
98 expr as MaybePyDsl<py.Expression>,
99 );
100 }
101
102 protected isNot(expr: Expr): BinaryPyDsl {
103 return new BinaryPyDsl(
104 this as unknown as MaybePyDsl<py.Expression>,
105 'is not',
106 expr as MaybePyDsl<py.Expression>,
107 );
108 }
109
110 protected lt(expr: Expr): BinaryPyDsl {
111 return new BinaryPyDsl(
112 this as unknown as MaybePyDsl<py.Expression>,
113 '<',
114 expr as MaybePyDsl<py.Expression>,
115 );
116 }
117
118 protected lte(expr: Expr): BinaryPyDsl {
119 return new BinaryPyDsl(
120 this as unknown as MaybePyDsl<py.Expression>,
121 '<=',
122 expr as MaybePyDsl<py.Expression>,
123 );
124 }
125
126 protected minus(expr: Expr): BinaryPyDsl {
127 return new BinaryPyDsl(
128 this as unknown as MaybePyDsl<py.Expression>,
129 '-',
130 expr as MaybePyDsl<py.Expression>,
131 );
132 }
133
134 protected mod(expr: Expr): BinaryPyDsl {
135 return new BinaryPyDsl(
136 this as unknown as MaybePyDsl<py.Expression>,
137 '%',
138 expr as MaybePyDsl<py.Expression>,
139 );
140 }
141
142 protected neq(expr: Expr): BinaryPyDsl {
143 return new BinaryPyDsl(
144 this as unknown as MaybePyDsl<py.Expression>,
145 '!=',
146 expr as MaybePyDsl<py.Expression>,
147 );
148 }
149
150 protected notIn(expr: Expr): BinaryPyDsl {
151 return new BinaryPyDsl(
152 this as unknown as MaybePyDsl<py.Expression>,
153 'not in',
154 expr as MaybePyDsl<py.Expression>,
155 );
156 }
157
158 protected or(expr: Expr): BinaryPyDsl {
159 return new BinaryPyDsl(
160 this as unknown as MaybePyDsl<py.Expression>,
161 'or',
162 expr as MaybePyDsl<py.Expression>,
163 );
164 }
165
166 protected plus(expr: Expr): BinaryPyDsl {
167 return new BinaryPyDsl(
168 this as unknown as MaybePyDsl<py.Expression>,
169 '+',
170 expr as MaybePyDsl<py.Expression>,
171 );
172 }
173
174 protected pow(expr: Expr): BinaryPyDsl {
175 return new BinaryPyDsl(
176 this as unknown as MaybePyDsl<py.Expression>,
177 '**',
178 expr as MaybePyDsl<py.Expression>,
179 );
180 }
181
182 protected times(expr: Expr): BinaryPyDsl {
183 return new BinaryPyDsl(
184 this as unknown as MaybePyDsl<py.Expression>,
185 '*',
186 expr as MaybePyDsl<py.Expression>,
187 );
188 }
189 }
190
191 return Operator as unknown as MixinCtor<TBase, OperatorMethods>;
192}