assets 0.3.0

asynchronous asset management
Documentation
use std::fmt;
use std::sync::Arc;

use super::{Asset, Export, Exporter, Handle, Import, Importer};

pub enum Event<A, L, S>
where
    A: Asset,
    L: Importer<Output = <A as Import>::Input>,
    S: Exporter<Input = <A as Export>::Output>,
{
    Load(Handle<A>),
    Save(Handle<A>),
    Reimport(Handle<A>),
    Remove(Handle<A>, Arc<A>),
    ExportError(Handle<A>, <A as Export>::Error),
    ImportError(Handle<A>, <A as Import>::Error),
    LoadError(Handle<A>, L::Error),
    SaveError(Handle<A>, S::Error),
}

unsafe impl<A, L, S> Send for Event<A, L, S>
where
    A: Asset,
    L: Importer<Output = <A as Import>::Input>,
    S: Exporter<Input = <A as Export>::Output>,
{}
unsafe impl<A, L, S> Sync for Event<A, L, S>
where
    A: Asset,
    L: Importer<Output = <A as Import>::Input>,
    S: Exporter<Input = <A as Export>::Output>,
{}

impl<A, L, S> fmt::Debug for Event<A, L, S>
where
    A: fmt::Debug + Asset,
    <A as Export>::Error: fmt::Debug,
    <A as Import>::Error: fmt::Debug,
    L: Importer<Output = <A as Import>::Input>,
    L::Error: fmt::Debug,
    S: Exporter<Input = <A as Export>::Output>,
    S::Error: fmt::Debug,
{
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            &Event::Load(ref handle) => f.debug_tuple("Load").field(handle).finish(),
            &Event::Save(ref handle) => f.debug_tuple("Save").field(handle).finish(),
            &Event::Reimport(ref handle) => f.debug_tuple("Reimport").field(handle).finish(),
            &Event::Remove(ref handle, ref asset) => {
                f.debug_tuple("Remove").field(handle).field(asset).finish()
            }
            &Event::ExportError(ref handle, ref export_error) => f
                .debug_tuple("ExportError")
                .field(&handle)
                .field(export_error)
                .finish(),
            &Event::ImportError(ref handle, ref import_error) => f
                .debug_tuple("ImportError")
                .field(&handle)
                .field(import_error)
                .finish(),
            &Event::LoadError(ref handle, ref load_error) => f
                .debug_tuple("LoadError")
                .field(&handle)
                .field(load_error)
                .finish(),
            &Event::SaveError(ref handle, ref save_error) => f
                .debug_tuple("SaveError")
                .field(&handle)
                .field(save_error)
                .finish(),
        }
    }
}