cbddd8db5eaada5f61be79f9f74c646453af09aa
[awesomized/ext-ion] / ion.stub.php
1 <?php
2
3 /** @generate-class-entries */
4
5 namespace ion;
6 enum Type : int {
7 case Null = 0x000;
8 case Bool = 0x100;
9 case Int = 0x200;
10 case Float = 0x400;
11 case Decimal = 0x500;
12 case Timestamp = 0x600;
13 case Symbol = 0x700;
14 case String = 0x800;
15 case CLob = 0x900;
16 case BLob = 0xa00;
17 case AList = 0xb00;
18 case SExp = 0xc00;
19 case Struct = 0xd00;
20 case Datagram = 0xf00;
21
22 case EOF =-0x100;
23 case NONE =-0x200;
24 }
25
26 enum Annotation : string {
27 case PHP = "PHP";
28
29 case REFERENCE = "R";
30 case BACKREF = "r";
31
32 case OBJECT = "o";
33 case CLASS_OBJ = "c";
34 case MAGIC_OBJ = "O";
35 case CUSTOM_OBJ = "C";
36 case SERIALIZABLE = "S";
37 case ENUM = "E";
38
39 case FIELD_NAME_INT = "i";
40 }
41
42 namespace ion\Symbol;
43 class ImportLocation {
44 public function __construct(
45 public readonly string $name,
46 public readonly int $location,
47 ) {}
48 }
49
50 namespace ion\Symbol;
51 enum System : string {
52 case Ion = '$ion';
53 case Ivm_1_0 = '$ion_1_0';
54 case IonSymbolTable = '$ion_symbol_table';
55 case Name = 'name';
56 case Version = 'version';
57 case Imports = 'imports';
58 case Symbols = 'symbols';
59 case MaxId = 'max_id';
60 case SharedSymbolTable = '$ion_shared_symbol_table';
61 }
62
63 namespace ion\Symbol\System;
64 enum SID : int {
65 case Ion = 1;
66 case Ivm_1_0 = 2;
67 case IonSymbolTable = 3;
68 case Name = 4;
69 case Version = 5;
70 case Imports = 6;
71 case Symbols = 7;
72 case MaxId = 8;
73 case SharedSymbolTable = 9;
74 }
75
76 namespace ion;
77 class Symbol {
78 public function __construct(
79 public readonly string $value,
80 public readonly int $sid = -1,
81 public readonly ?Symbol\ImportLocation $importLocation = null,
82 ) {}
83
84 public function equals(Symbol $symbol): bool { }
85 }
86
87 namespace ion\Symbol;
88 class Table {
89
90 }
91
92 namespace ion;
93 class Catalog {
94 }
95
96 namespace ion;
97 class Collection {
98
99 }
100
101
102 namespace ion\Decimal;
103 class Context {
104 public function __construct(
105 public readonly int $bits = 128
106 ) {}
107 }
108
109 namespace ion;
110 class Decimal {
111 public function __construct(
112 public readonly string|int $number,
113 public readonly ?Decimal\Context $context = null,
114 ) {}
115
116 public function equals(Decimal $decimal) : bool {}
117 public function isInt() : bool {}
118
119 public function __toString() : string {}
120 /** @alias ion\Decimal::__toString */
121 public function toString() : string {}
122 public function toInt() : int {}
123 }
124
125 namespace ion\Timestamp;
126 enum Precision : int {
127 case Year = 0x1;
128 case Month = 0x1|0x2;
129 case Day = 0x1|0x2|0x4;
130 case Min = 0x1|0x2|0x4|0x10;
131 case Sec = 0x1|0x2|0x4|0x10|0x20;
132 case Frac = 0x1|0x2|0x4|0x10|0x20|0x40;
133 }
134 namespace ion;
135 class Timestamp extends \DateTime {
136 public readonly int $precision;
137 public readonly string $format;
138
139 public function __construct(
140 Timestamp\Precision|int $precision,
141 ?string $format = null,
142 ?string $datetime = null,
143 ?\DateTimeZone $timezone = null,
144 ) {}
145
146 public function __toString() : string {}
147 }
148
149
150 namespace ion;
151 interface Reader extends \RecursiveIterator {
152 public function getType() : Type;
153 public function hasAnnotations() : bool;
154 public function hasAnnotation(string $annotation) : bool;
155 public function isNull() : bool;
156 public function isInStruct() : bool;
157 public function getFieldName() : string;
158 public function getFieldNameSymbol() : Symbol;
159 public function getAnnotations() : array;
160 public function getAnnotationSymbols() : array;
161 public function countAnnotations() : int;
162 public function getAnnotation(int $index) : string;
163 public function getAnnotationSymbol(int $index) : Symbol;
164
165 public function readNull() : Type;
166 public function readBool() : bool;
167 public function readInt() : int|string;
168 public function readFloat() : float;
169 public function readDecimal() : Decimal;
170 public function readTimestamp() : Timestamp;
171 public function readSymbol() : Symbol;
172 public function readString() : string;
173 /** @param ref $string */
174 public function readStringPart(&$string, int $length = 0x1000) : bool;
175 public function readLob() : string;
176 /** @param ref $string */
177 public function readLobPart(&$string, int $length = 0x1000) : bool;
178
179 public function getPosition() : int;
180 public function getDepth() : int;
181
182 public function seek(int $offset, int $length = -1) : void;
183 /*
184 public function getSymbolTable() : SymbolTable;
185 public function setSymbolTable(SymbolTable $table) : void;
186 */
187 public function getValueOffset() : int;
188 public function getValueLength() : int;
189 }
190 namespace ion\Reader;
191 class Options {
192 public function __construct(
193 public readonly ?\ion\Catalog $catalog = null,
194 public readonly ?\ion\Decimal\Context $decimalContext = null,
195 public readonly ?\Closure $onContextChange = null,
196 public readonly bool $returnSystemValues = false,
197 public readonly int $newLine = 0xa,
198 public readonly int $maxContainerDepth = 10,
199 public readonly int $maxAnnotations = 10,
200 public readonly int $maxAnnotationBuffered = 512,
201 public readonly int $symbolThreshold = 4096,
202 public readonly int $userValueThreshold = 4096,
203 public readonly int $chunkThreshold = 4096,
204 public readonly int $allocationPageSize = 4096,
205 public readonly bool $skipCharacterValidation = false,
206 ) {}
207 }
208
209 namespace ion\Reader;
210 abstract class Reader implements \ion\Reader {
211 public readonly ?Options $options;
212
213 public function hasChildren() : bool {}
214 public function getChildren() : \ion\Reader {}
215
216 public function rewind() : void {}
217 public function next() : void {}
218 public function valid() : bool {}
219 public function key() : mixed {}
220 public function current() : mixed {}
221
222 public function getType() : \ion\Type {}
223 public function hasAnnotations() : bool {}
224 public function hasAnnotation(string $annotation) : bool {}
225 public function isNull() : bool {}
226 public function isInStruct() : bool {}
227 public function getFieldName() : string {}
228 public function getFieldNameSymbol() : \ion\Symbol {}
229 public function getAnnotations() : array {}
230 public function getAnnotationSymbols() : array {}
231 public function countAnnotations() : int {}
232 public function getAnnotation(int $index) : string {}
233 public function getAnnotationSymbol(int $index) : \ion\Symbol {}
234
235 public function readNull() : \ion\Type {}
236 public function readBool() : bool {}
237 public function readInt() : int|string {}
238 public function readFloat() : float {}
239 public function readDecimal() : \ion\Decimal {}
240 public function readTimestamp() : \ion\Timestamp {}
241 public function readSymbol() : \ion\Symbol {}
242 public function readString() : string {}
243 /** @param ref $string */
244 public function readStringPart(&$string, int $length = 0x1000) : bool {}
245 public function readLob() : string {}
246 /** @param ref $string */
247 public function readLobPart(&$string, int $length = 0x1000) : bool {}
248
249 public function getPosition() : int {}
250 public function getDepth() : int{}
251
252 public function seek(int $offset, int $length = -1) : void {}
253 /*
254 public function getSymbolTable() : SymbolTable {}
255 public function setSymbolTable(SymbolTable $table) : void {}
256 */
257 public function getValueOffset() : int {}
258 public function getValueLength() : int {}
259 }
260 namespace ion\Reader;
261 interface Buffer extends \ion\Reader {
262 public function getBuffer() : string;
263 }
264
265 namespace ion\Reader\Buffer;
266 class Reader extends \ion\Reader\Reader implements \ion\Reader\Buffer {
267 public function __construct(
268 string $buffer,
269 ?\ion\Reader\Options $options = null,
270 ) {}
271
272 public function getBuffer() : string {}
273 }
274
275 namespace ion\Reader;
276 interface Stream extends \ion\Reader {
277 /** @return resource */
278 public function getStream();
279 /** @param resource $stream */
280 public function resetStream($stream) : void;
281 /** @param resource $stream */
282 public function resetStreamWithLength($stream, int $position, int $length = -1) : void;
283 }
284
285 namespace ion\Reader\Stream;
286 class Reader extends \ion\Reader\Reader implements \ion\Reader\Stream {
287 /** @param resource $stream */
288 public function __construct(
289 $stream,
290 ?\ion\Reader\Options $options = null,
291 ) {
292 }
293 /** @return resource */
294 public function getStream() {}
295 /** @param resource $stream */
296 public function resetStream($stream) : void {}
297 /** @param resource $stream */
298 public function resetStreamWithLength($stream, int $position, int $length = -1) : void {}
299 }
300
301 namespace ion\Writer;
302 class Options {
303 public function __construct(
304 public readonly ?\ion\Catalog $catalog = null,
305 public readonly ?\ion\Decimal\Context $decimalContext = null,
306 ?\ion\Collection $encodingSymbolTable = null,
307 public readonly bool $outputBinary = false,
308 public readonly bool $compactFloats = false,
309 public readonly bool $escapeNonAscii = false,
310 public readonly bool $prettyPrint = false,
311 public readonly bool $indentTabs = true,
312 public readonly int $indentSize = 2,
313 public readonly bool $smallContainersInline = true,
314 public readonly bool $suppressSystemValues = false,
315 public readonly bool $flushEveryValue = false,
316 public readonly int $maxContainerDepth = 10,
317 public readonly int $maxAnnotations = 10,
318 public readonly int $tempBufferSize = 0x400,
319 public readonly int $allocationPageSize = 0x1000,
320 ) {}
321
322 // public function addSharedImports(\ion\Collection|\ion\Symbol\Table ...$imports) : void;
323 }
324
325 namespace ion;
326 interface Writer {
327 public function writeNull() : void;
328 public function writeTypedNull(Type $type) : void;
329 public function writeBool(bool $value) : void;
330 public function writeInt(int|string $value) : void;
331 public function writeFloat(float $value) : void;
332 public function writeDecimal(Decimal|string $value) : void;
333 public function writeTimestamp(Timestamp|string $value) : void;
334 public function writeSymbol(Symbol|string $value) : void;
335 public function writeString(string $value) : void;
336 public function writeCLob(string $value) : void;
337 public function writeBLob(string $value) : void;
338
339 public function startLob(Type $type) : void;
340 public function appendLob(string $data) : void;
341 public function finishLob() : void;
342
343 public function startContainer(Type $type) : void;
344 public function finishContainer() : void;
345
346 public function writeFieldName(string $name) : void;
347
348 public function writeAnnotation(Symbol|string ...$annotation) : void;
349
350 public function getDepth() : int;
351 public function flush() : int;
352 public function finish() : int;
353
354 public function writeOne(Reader $reader) : void;
355 public function writeAll(Reader $reader) : void;
356
357 // public function getCatalog() : Catalog;
358 // public function setCatalog(Catalog $catalog) : void;
359
360 // public function getSymbolTable() : Symbol\Table;
361 // puvlic function setSymbolTable(Symbol\Table $table) : void;
362 }
363
364 namespace ion\Writer;
365 abstract class Writer implements \ion\Writer {
366 public function writeNull() : void {}
367 public function writeTypedNull(\ion\Type $type) : void {}
368 public function writeBool(bool $value) : void {}
369 public function writeInt(int|string $value) : void {}
370 public function writeFloat(float $value) : void {}
371 public function writeDecimal(\ion\Decimal|string $value) : void {}
372 public function writeTimestamp(\ion\Timestamp|string $value) : void {}
373 public function writeSymbol(\ion\Symbol|string $value) : void {}
374 public function writeString(string $value) : void {}
375 public function writeCLob(string $value) : void {}
376 public function writeBLob(string $value) : void {}
377
378 public function startLob(\ion\Type $type) : void {}
379 public function appendLob(string $data) : void {}
380 public function finishLob() : void {}
381
382 public function startContainer(\ion\Type $type) : void {}
383 public function finishContainer() : void {}
384
385 public function writeFieldName(string $name) : void {}
386
387 public function writeAnnotation(\ion\Symbol|string ...$annotation) : void {}
388
389 public function getDepth() : int {}
390 public function flush() : int {}
391 public function finish() : int {}
392
393 public function writeOne(\ion\Reader $reader) : void {}
394 public function writeAll(\ion\Reader $reader) : void {}
395 }
396
397 namespace ion\Writer;
398 interface Buffer extends \ion\Writer {
399 public function getBuffer() : string;
400 }
401
402 namespace ion\Writer\Buffer;
403 class Writer extends \ion\Writer\Writer implements \ion\Writer\Buffer {
404 /** @param ref $buffer */
405 public function __construct(
406 ?string &$buffer,
407 ?\ion\Writer\Options $options = null,
408 ) {}
409
410 /**
411 * @return string a _copy_ of $buffer passed to the constructor
412 */
413 public function getBuffer() : string {}
414 }
415
416 namespace ion\Writer;
417 interface Stream extends \ion\Writer {
418 /** @return resource */
419 public function getStream();
420 }
421
422 namespace ion\Writer\Stream;
423 class Writer extends \ion\Writer\Writer implements \ion\Writer\Stream {
424 /** @param resource $stream */
425 public function __construct(
426 $stream,
427 ?\ion\Writer\Options $options = null,
428 ) {}
429 /** @return resource */
430 public function getStream() {}
431 }
432
433 namespace ion\PHP;
434 class Serializer {
435 public function __construct(
436 public readonly \ion\Writer $writer,
437 public readonly bool $callMagicSerialize = true,
438 public readonly ?string $callCustomSerialize = null,
439 ) {}
440 public function __invoke(mixed $data) : void {}
441 protected function serialize(mixed $data) : void {}
442 }
443
444 namespace ion\PHP;
445 class Unserializer {
446 public function __construct(
447 public readonly \ion\Reader $reader,
448 public readonly bool $callMagicUnserialize = true,
449 public readonly ?string $callCustomUnserialize = null,
450 ){}
451 public function __invoke() : mixed {}
452 protected function unserialize() : mixed {}
453 }
454
455 namespace ion;
456 function serialize(mixed $data, Writer\Options $options = null) : string {}
457 function unserialize(mixed $serialized, Reader\Options $options = null) : mixed {}
458
459
460
461