mamba 0.3.6

A transpiler which converts Mamba files to Python 3 files
Documentation
use std::ops::Deref;

use python_parser::ast::{Argument, Expression, Subscript};
use python_parser::ast::Subscript::Simple;

use crate::check::context::clss::python::python_to_concrete;
use crate::check::context::parameter::generic::GenericParameter;
use crate::check::name::string_name::StringName;

pub struct GenericParameters {
    pub parameters: Vec<GenericParameter>,
}

impl From<&Vec<Argument>> for GenericParameters {
    fn from(args: &Vec<Argument>) -> Self {
        let mut parameters = vec![];
        args.iter().for_each(|arg| match &arg {
            Argument::Positional(arg) => match &arg {
                Expression::Subscript(name, generics)
                if &Expression::Name(String::from("Generic")) == name.deref() =>
                    {
                        for name in generics {
                            if let Simple(Expression::Name(name)) = name {
                                parameters.push(GenericParameter {
                                    is_py_type: true,
                                    name: StringName::from(python_to_concrete(name).as_str()),
                                    parent: None,
                                })
                            }
                        }
                    }
                _ => {}
            },
            Argument::Starargs(_) => {}
            Argument::Keyword(..) => {}
            Argument::Kwargs(_) => {}
        });

        GenericParameters { parameters }
    }
}

impl From<&Vec<Subscript>> for GenericParameters {
    fn from(args: &Vec<Subscript>) -> Self {
        let mut parameters = vec![];
        args.iter().for_each(|subscript| {
            if let Subscript::Simple(Expression::Name(name)) = subscript {
                let name = StringName::from(python_to_concrete(name).as_str());
                parameters.push(GenericParameter { is_py_type: true, name, parent: None })
            }
        });

        GenericParameters { parameters }
    }
}