@@ -4,21 +4,35 @@ import {
44 HasRequiredKeys ,
55 Config ,
66 validate ,
7- validateNoDuplicateIds
7+ validateNoDuplicateIds ,
8+ HasIntegers
89} from '../validation' ;
9- import InvalidConfig from '../error/InvalidConfig' ;
1010
11- const requiredKeys = [ 'member_status' ] ;
11+ const requiredKeys = [
12+ 'member_status' ,
13+ 'leader_status' ,
14+ 'requester_status' ,
15+ 'new_member_status'
16+ ] ;
17+ const integerKeys = [ 'leader_status' , 'requester_status' , 'new_member_status' ] ;
1218const requiredObjects = [ 'member_status' ] ;
1319
1420interface RawAllianceConfig {
1521 member_status : { [ key : string ] : object } ;
22+ leader_status : string ;
23+ requester_status : string ;
24+ new_member_status : string ;
1625}
1726
1827type MemberStatuses = { [ key : string ] : MemberStatus } ;
1928
20- class AllianceConfig implements Config , HasRequiredKeys , HasObjects {
29+ class AllianceConfig
30+ implements Config , HasRequiredKeys , HasObjects , HasIntegers
31+ {
2132 private readonly _member_status : MemberStatuses = { } ;
33+ private readonly _leader_status : number ;
34+ private readonly _requester_status : number ;
35+ private readonly _new_member_status : number ;
2236
2337 constructor ( rawYaml : object ) {
2438 validate ( this , rawYaml ) ;
@@ -32,39 +46,43 @@ class AllianceConfig implements Config, HasRequiredKeys, HasObjects {
3246 ) ;
3347 }
3448
49+ this . _leader_status = parseInt (
50+ ( rawYaml as RawAllianceConfig ) . leader_status
51+ ) ;
52+ this . _requester_status = parseInt (
53+ ( rawYaml as RawAllianceConfig ) . requester_status
54+ ) ;
55+ this . _new_member_status = parseInt (
56+ ( rawYaml as RawAllianceConfig ) . new_member_status
57+ ) ;
58+
3559 validateNoDuplicateIds (
3660 this ,
3761 'member_status' ,
3862 Object . values ( this . _member_status )
3963 ) ;
40-
41- let leaderFound = false ;
42- for ( const memberStatusKey in this . member_status ) {
43- const member = this . member_status [ memberStatusKey ] ;
44- if ( member . leader ) {
45- if ( leaderFound ) {
46- throw new InvalidConfig ( this , 'Cannot have two leader statuses' ) ;
47- } else {
48- leaderFound = true ;
49- }
50- }
51- }
52-
53- if ( ! leaderFound ) {
54- throw new InvalidConfig (
55- this ,
56- 'One member status must be tagged as leader, found 0'
57- ) ;
58- }
5964 }
6065
6166 getRequiredKeys = ( ) : string [ ] => requiredKeys ;
6267 getObjects = ( ) : string [ ] => requiredObjects ;
68+ getIntegers = ( ) : string [ ] => integerKeys ;
6369 getClassName = ( ) : string => AllianceConfig . name ;
6470
6571 get member_status ( ) : MemberStatuses {
6672 return this . _member_status ;
6773 }
74+
75+ get leader_status ( ) : number {
76+ return this . _leader_status ;
77+ }
78+
79+ get requester_status ( ) : number {
80+ return this . _requester_status ;
81+ }
82+
83+ get new_member_status ( ) : number {
84+ return this . _new_member_status ;
85+ }
6886}
6987
7088export default AllianceConfig ;
0 commit comments