autapi 0.0.1

Automatic OpenAPI specification from function signatures
Documentation
pub mod schema;

pub use serde;
pub use serde_json;

use std::{cmp, mem};

use serde::{Deserialize, Deserializer};

use crate::openapi::{Entry, Map};

pub fn deserialize_some<'de, D, T>(deserializer: D) -> Result<Option<T>, D::Error>
where
    T: Deserialize<'de>,
    D: Deserializer<'de>,
{
    Ok(Some(T::deserialize(deserializer)?))
}

pub fn merge_maps<K: Ord, V>(
    target: &mut Map<K, V>,
    source: Map<K, V>,
    mut collision: impl FnMut(&mut V, V),
) {
    for (k, v) in source {
        match target.entry(k) {
            Entry::Occupied(mut entry) => {
                collision(entry.get_mut(), v);
            }
            Entry::Vacant(entry) => {
                entry.insert(v);
            }
        }
    }
}

pub fn is_default<T: Default + PartialEq>(value: &T) -> bool {
    *value == T::default()
}

pub fn size_hint<T>(hint: Option<usize>) -> usize {
    const MAX_PREALLOC_BYTES: usize = 1024 * 1024;

    if mem::size_of::<T>() == 0 {
        0
    } else {
        cmp::min(hint.unwrap_or(0), MAX_PREALLOC_BYTES / mem::size_of::<T>())
    }
}