1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
use registry::{Registry, Ns};
use std::io;
#[allow(missing_copy_implementations)]
pub struct StaticGenerator;
impl super::Generator for StaticGenerator {
fn write<W>(&self, registry: &Registry, ns: Ns, dest: &mut W) -> io::Result<()> where W: io::Write {
try!(write_header(dest));
try!(write_type_aliases(&ns, dest));
try!(write_enums(registry, dest));
try!(write_fns(registry, &ns, dest));
Ok(())
}
}
fn write_header<W>(dest: &mut W) -> io::Result<()> where W: io::Write {
writeln!(dest, r#"
mod __gl_imports {{
extern crate libc;
pub use std::mem;
}}
"#)
}
fn write_type_aliases<W>(ns: &Ns, dest: &mut W) -> io::Result<()> where W: io::Write {
try!(writeln!(dest, r#"
pub mod types {{
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(dead_code)]
#![allow(missing_copy_implementations)]
"#));
try!(super::gen_type_aliases(ns, dest));
writeln!(dest, "
}}
")
}
fn write_enums<W>(registry: &Registry, dest: &mut W) -> io::Result<()> where W: io::Write {
for e in registry.enum_iter() {
try!(super::gen_enum_item(e, "types::", dest));
}
Ok(())
}
fn write_fns<W>(registry: &Registry, ns: &Ns, dest: &mut W) -> io::Result<()> where W: io::Write {
try!(writeln!(dest, "
#[allow(non_snake_case, unused_variables, dead_code)]
extern \"system\" {{"));
for c in registry.cmd_iter() {
try!(writeln!(dest,
"#[link_name=\"{symbol}\"]
pub fn {name}({params}) -> {return_suffix};",
symbol = super::gen_symbol_name(ns, &c.proto.ident),
name = c.proto.ident,
params = super::gen_parameters(c, true, true).connect(", "),
return_suffix = super::gen_return_type(c)
));
}
writeln!(dest, "}}")
}