image-stream 0.1.0

Stream RgbImages
Documentation
use std::io::prelude::*;
use image::RgbImage;

use message::*;


pub struct Client<S: Read + Write> {
    messenger: Messenger<S>,
    dimensions: (u32, u32)
}

impl<S: Read + Write> Client<S> {
    pub fn new(stream: S) -> Result<Client<S>, String> {
        let messenger = Messenger::new(stream);

        let dimensions = match messenger.recv() {
            Ok(m) => match m {
                Message::Dimensions(d) => d,
                _ => return Err("Unexpected Message, expected Capabilities Message".to_string())
            },
            Err(e) => return Err(e)
        };

        Ok(Client { 
            messenger,
            dimensions
        })
    }

    pub fn dimensions(&self) -> (u32, u32) {
        self.dimensions
    }

    pub fn send(&self, image: RgbImage) -> Result<usize, String> {
        let image_data = image.into_raw();
        let message = Message::RgbImage(image_data);
        self.messenger.send(&message)
    }
}