menmos 0.2.6

High-Level SDK for the menmos platform
Documentation
use std::{path::Path, sync::Arc};

use menmos_client::Meta;

use menmos_std::fs::mimetype;

use snafu::prelude::*;

#[derive(Debug, Snafu)]
pub enum MetadataDetectorError {
    #[snafu(display("failed to deserialize mimetype data: {}", source))]
    MimetypeJsonError { source: serde_json::Error },
}

type Result<T> = std::result::Result<T, MetadataDetectorError>;

#[derive(Clone)]
pub struct MetadataDetector {}

impl MetadataDetector {
    pub fn new() -> Result<Self> {
        Ok(Self {})
    }

    pub fn populate<P: AsRef<Path>>(&self, path: P, meta: &mut Meta) -> Result<()> {
        if let Some(mime_type) = mimetype(&path) {
            meta.fields
                .insert(String::from("content-type"), mime_type.into());
        }

        if let Some(extension) = path.as_ref().extension().and_then(|e| e.to_str()) {
            meta.fields
                .insert(String::from("extension"), String::from(extension).into());
        }

        Ok(())
    }
}

pub type MetadataDetectorRC = Arc<MetadataDetector>;