|
12 | 12 |
|
13 | 13 | from generators.source_top import XdrSourceTopGenerator |
14 | 14 | from generators.enum import XdrEnumGenerator |
| 15 | +from generators.passthru import XdrPassthruGenerator |
15 | 16 | from generators.pointer import XdrPointerGenerator |
16 | 17 | from generators.program import XdrProgramGenerator |
17 | 18 | from generators.typedef import XdrTypedefGenerator |
18 | 19 | from generators.struct import XdrStructGenerator |
19 | 20 | from generators.union import XdrUnionGenerator |
20 | 21 |
|
21 | 22 | from xdr_ast import transform_parse_tree, _RpcProgram, Specification |
22 | | -from xdr_ast import _XdrAst, _XdrEnum, _XdrPointer |
| 23 | +from xdr_ast import _XdrAst, _XdrEnum, _XdrPassthru, _XdrPointer |
23 | 24 | from xdr_ast import _XdrStruct, _XdrTypedef, _XdrUnion |
24 | 25 |
|
25 | 26 | from xdr_parse import xdr_parser, set_xdr_annotate, set_xdr_enum_validation |
@@ -74,22 +75,31 @@ def generate_server_source(filename: str, root: Specification, language: str) -> |
74 | 75 | gen.emit_source(filename, root) |
75 | 76 |
|
76 | 77 | for definition in root.definitions: |
77 | | - emit_source_decoder(definition.value, language, "server") |
| 78 | + if isinstance(definition.value, _XdrPassthru): |
| 79 | + passthru_gen = XdrPassthruGenerator(language, "server") |
| 80 | + passthru_gen.emit_decoder(definition.value) |
| 81 | + else: |
| 82 | + emit_source_decoder(definition.value, language, "server") |
78 | 83 | for definition in root.definitions: |
79 | | - emit_source_encoder(definition.value, language, "server") |
| 84 | + if not isinstance(definition.value, _XdrPassthru): |
| 85 | + emit_source_encoder(definition.value, language, "server") |
80 | 86 |
|
81 | 87 |
|
82 | 88 | def generate_client_source(filename: str, root: Specification, language: str) -> None: |
83 | | - """Generate server-side source code""" |
| 89 | + """Generate client-side source code""" |
84 | 90 |
|
85 | 91 | gen = XdrSourceTopGenerator(language, "client") |
86 | 92 | gen.emit_source(filename, root) |
87 | 93 |
|
88 | | - print("") |
89 | 94 | for definition in root.definitions: |
90 | | - emit_source_encoder(definition.value, language, "client") |
| 95 | + if isinstance(definition.value, _XdrPassthru): |
| 96 | + passthru_gen = XdrPassthruGenerator(language, "client") |
| 97 | + passthru_gen.emit_decoder(definition.value) |
| 98 | + else: |
| 99 | + emit_source_encoder(definition.value, language, "client") |
91 | 100 | for definition in root.definitions: |
92 | | - emit_source_decoder(definition.value, language, "client") |
| 101 | + if not isinstance(definition.value, _XdrPassthru): |
| 102 | + emit_source_decoder(definition.value, language, "client") |
93 | 103 |
|
94 | 104 | # cel: todo: client needs PROC macros |
95 | 105 |
|
|
0 commit comments