Browse Source

Implement Display for png_image

Lucas Stadler 10 years ago
parent
commit
fb389a2eb2
1 changed files with 18 additions and 14 deletions
  1. 18 14
      rust/coffi/src/main.rs

+ 18 - 14
rust/coffi/src/main.rs

@ -19,6 +19,22 @@ struct png_image {
19 19
    message: [u8; 64],
20 20
}
21 21
22
impl std::fmt::Display for png_image {
23
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
24
        fn get_message(msg: [u8; 64]) -> String {
25
            let mut vec = Vec::new();
26
            for i in 0..64 {
27
                vec.push(msg[i]);
28
            }
29
            String::from_utf8(vec).unwrap()
30
        }
31
32
        write!(f, "{}x{} {} {} {} {} {} {}", self.width, self.height, self.version,
33
               self.format, self.flags, self.colormap_entries, self.warning_or_error,
34
               get_message(self.message))
35
    }
36
}
37
22 38
#[link(name = "png")]
23 39
extern {
24 40
    fn png_image_begin_read_from_file(img: *mut png_image, file_name: *const u8) -> libc::c_int;
@ -28,24 +44,12 @@ fn main() {
28 44
    let x = unsafe { cos(3.1415) };
29 45
    println!("cos(3.1415) = {}", x);
30 46
31
    fn get_message(msg: [u8; 64]) -> String {
32
        let mut vec = Vec::new();
33
        for i in 0..64 {
34
            vec.push(msg[i]);
35
        }
36
        String::from_utf8(vec).unwrap()
37
    }
38
39
    fn print_img(img: &png_image) {
40
        println!("{}x{} {} {} {} {} {} {}", img.width, img.height, img.version, img.format, img.flags, img.colormap_entries, img.warning_or_error, get_message(img.message))
41
    }
42
43 47
    unsafe {
44 48
        let mut img: png_image = std::mem::zeroed();
45 49
        img.version = 1;
46
        print_img(&img);
50
        println!("{}", img);
47 51
        let res = png_image_begin_read_from_file(&mut img, "mei.png\0".as_ptr());
48 52
        println!("read_from_file: {}", res);
49
        print_img(&img);
53
        println!("{}", img);
50 54
    }
51 55
}