Documentation
use self::Parameter::*;
use super::*;

#[derive(Clone, Debug)]
pub enum Parameter {
    Array(Vec<Parameter>),
    // true: mut
    // false:
    // none: none
    Zelf(Option<bool>),
    PositionOnly,
    KeyValueOnly,
}

impl Parameter {
    pub fn into_vec(self) -> Vec<Html> {
        match self {
            Array(vec) => vec.into_iter().map(|e| e.into_vec()).flatten().collect(),
            Zelf(None) => vec![],
            Zelf(Some(true)) => vec![html! {<span class="keyword">{"mut self"}</span>}],
            Zelf(Some(false)) => vec![html! {<span class="keyword">{"self"}</span>}],
            PositionOnly => vec![Tooltip::html("/", "All the previous arguments cannot be written as key-value pairs!")],
            KeyValueOnly => vec![Tooltip::html("*", "All the following arguments must be written as key-value pairs!")],
        }
    }
    pub fn length(&self) -> usize {
        match self {
            Array(v) => v.iter().map(|e| e.length()).sum(),
            Zelf(None) => 0,
            Zelf(Some(true)) => 8,
            Zelf(Some(false)) => 4,
            PositionOnly => 1,
            KeyValueOnly => 1,
        }
    }
}