mod vector;
pub use self::vector::*;
use super::edit::*;
use super::frame::*;
use super::editable::*;
use std::u32;
use std::sync::*;
use std::ops::Range;
use std::time::Duration;
pub trait Layer :
Send {
fn id(&self) -> u64;
fn supported_edit_types(&self) -> Vec<LayerEditType>;
fn get_frame_at_time(&self, time_index: Duration) -> Arc<Frame>;
fn get_key_frames(&self) -> Box<Iterator<Item=Duration>> { self.get_key_frames_during_time(Duration::from_millis(0)..Duration::from_secs(u32::MAX as u64)) }
fn get_key_frames_during_time(&self, when: Range<Duration>) -> Box<Iterator<Item=Duration>>;
fn add_key_frame(&mut self, when: Duration);
fn remove_key_frame(&mut self, when: Duration);
fn as_vector_layer<'a>(&'a self) -> Option<Reader<'a, VectorLayer>>;
fn edit_vectors<'a>(&'a mut self) -> Option<Editor<'a, VectorLayer>>;
}