1+ from dataclasses import dataclass
12
2-
3+ @ dataclass
34class SchemaVersion (object ):
5+ services : List [Service ]
6+
7+ @dataclass
8+ class Service (object ):
9+ name : str
10+ methods : List [Method ]
11+
12+
13+ @dataclass
14+ class Method (object ):
15+ name : str
16+ request : Message
17+ response : Message
18+
19+
20+ @dataclass
21+ class Message (object ):
22+ name : str
23+ fields : List [Field ]
24+
25+
26+ @dataclass
27+ class Field (object ):
28+ name : str
29+ type : Type
30+ label : str
31+ id_number : int
32+
33+ @dataclass
34+ class Type (object ):
35+ name : str
36+ kind : str
37+
38+ @dataclass
39+ class Enum (object ):
40+ name : str
41+ values : List [EnumValue ]
42+
43+ @dataclass
44+ class EnumValue (object ):
45+ name : str
46+ value : int
447
548def check_proposal (
649 client_schema_versions : List [SchemaVersion ],
750 server_schema_versions : List [SchemaVersion ],
851 proposed_schema_version : SchemaVersion ):
952
53+ for client_schema_version in client_schema_versions :
54+ check_schema (
55+ client_schema_version = client_schema_version ,
56+ server_schema_version = proposed_schema_version
57+ )
1058
11- for client_schema_version :
59+ for server_schema_version in server_schema_versions :
60+ check_schema (
61+ client_schema_version = proposed_schema_version ,
62+ server_schema_version = server_schema_version )
1263
1364
65+ def check_schema (client_schema_version : SchemaVersion , server_schema_version : SchemaVersion ):
66+ pass
1467
1568
69+ def check_method (client_method : Method , server_method : Method ):
70+ check_message (producer_message = client_method .request , consumer_message = server_method .request )
71+ check_message (producer_message = server_method .response , consumer_message = client_method .response )
1672
73+ def check_message (producer_message : Message , consumer_message : Message ):
1774 pass
1875
1976
20-
21-
22- def check_schema (client_schema_version : SchemaVersion , servesr_schema_version : SchemaVersion ):
77+ def check_field (producer_field : Optional [Field ], consumer_field : Optional [Field ]):
2378 pass
2479
2580
2681
27-
28- # [ CLIENT v0, CLIENT V1, PROPOSED ]
29- # X X X
30- # X X X
31- # [ SERVER v0, SERVER V1, PROPOSED]
0 commit comments