@@ -15,6 +15,45 @@ pub(super) struct Layout<'a> {
15
15
layout : HashMap < & ' a str , ( u8 , u8 ) > ,
16
16
}
17
17
18
+ macro_rules! keyboards {
19
+ ( $( $board: expr ) ,* $( , ) ?) => {
20
+ fn layout_data( board: & str ) -> Option <( & ' static str , & ' static str , & ' static str ) > {
21
+ match board {
22
+ $(
23
+ $board => {
24
+ let keymap_csv =
25
+ include_str!( concat!( "../../../layouts/" , $board, "/keymap.csv" ) ) ;
26
+ let layout_csv =
27
+ include_str!( concat!( "../../../layouts/" , $board, "/layout.csv" ) ) ;
28
+ let physical_json =
29
+ include_str!( concat!( "../../../layouts/" , $board, "/physical.json" ) ) ;
30
+ Some ( ( keymap_csv, layout_csv, physical_json) )
31
+ }
32
+ ) *
33
+ _ => None
34
+ }
35
+ }
36
+
37
+ pub fn layouts( ) -> & ' static [ & ' static str ] {
38
+ & [ $( $board ) ,* ]
39
+ }
40
+ } ;
41
+ }
42
+
43
+ keyboards ! [
44
+ "system76/addw1" ,
45
+ "system76/addw2" ,
46
+ "system76/bonw14" ,
47
+ "system76/darp5" ,
48
+ "system76/darp6" ,
49
+ "system76/gaze15" ,
50
+ "system76/launch_alpha_1" ,
51
+ "system76/launch_alpha_2" ,
52
+ "system76/lemp9" ,
53
+ "system76/oryp5" ,
54
+ "system76/oryp6" ,
55
+ ] ;
56
+
18
57
impl < ' a > Layout < ' a > {
19
58
pub fn from_data ( keymap_csv : & ' a str , layout_csv : & ' a str , physical_json : & ' a str ) -> Self {
20
59
let ( keymap, scancode_names) = parse_keymap_csv ( keymap_csv) ;
@@ -29,33 +68,9 @@ impl<'a> Layout<'a> {
29
68
}
30
69
31
70
pub fn from_board ( board : & ' a str ) -> Option < Self > {
32
- macro_rules! keyboard {
33
- ( $board: expr) => {
34
- if board == $board {
35
- let keymap_csv =
36
- include_str!( concat!( "../../../layouts/" , $board, "/keymap.csv" ) ) ;
37
- let layout_csv =
38
- include_str!( concat!( "../../../layouts/" , $board, "/layout.csv" ) ) ;
39
- let physical_json =
40
- include_str!( concat!( "../../../layouts/" , $board, "/physical.json" ) ) ;
41
- return Some ( Self :: from_data( keymap_csv, layout_csv, physical_json) ) ;
42
- }
43
- } ;
44
- }
45
-
46
- keyboard ! ( "system76/addw1" ) ;
47
- keyboard ! ( "system76/addw2" ) ;
48
- keyboard ! ( "system76/bonw14" ) ;
49
- keyboard ! ( "system76/darp5" ) ;
50
- keyboard ! ( "system76/darp6" ) ;
51
- keyboard ! ( "system76/gaze15" ) ;
52
- keyboard ! ( "system76/launch_alpha_1" ) ;
53
- keyboard ! ( "system76/launch_alpha_2" ) ;
54
- keyboard ! ( "system76/lemp9" ) ;
55
- keyboard ! ( "system76/oryp5" ) ;
56
- keyboard ! ( "system76/oryp6" ) ;
57
-
58
- None
71
+ layout_data ( board) . map ( |( keymap_csv, layout_csv, physical_json) | {
72
+ Self :: from_data ( keymap_csv, layout_csv, physical_json)
73
+ } )
59
74
}
60
75
61
76
pub fn keys ( & self ) -> Vec < Key > {
@@ -186,19 +201,7 @@ mod tests {
186
201
187
202
#[ test]
188
203
fn layout_from_board ( ) {
189
- for i in & [
190
- "system76/addw1" ,
191
- "system76/addw2" ,
192
- "system76/bonw14" ,
193
- "system76/darp5" ,
194
- "system76/darp6" ,
195
- "system76/gaze15" ,
196
- "system76/launch_alpha_1" ,
197
- "system76/launch_alpha_2" ,
198
- "system76/lemp9" ,
199
- "system76/oryp5" ,
200
- "system76/oryp6" ,
201
- ] {
204
+ for i in layouts ( ) {
202
205
Layout :: from_board ( i) . unwrap ( ) ;
203
206
}
204
207
}
0 commit comments