use itertools::Itertools;
use yew::prelude::*;
mod classes;
mod constants;
mod container;
mod definition;
mod extends;
mod modules;
mod traits;
mod typing;
pub use crate::{
items,
items::{
classes::Class,
constants::{FlexCenterExpansion, IndentHtml, EMPTY_HTML},
container::*,
definition::{Function, Method, Parameter},
extends::Extends,
traits::{Trait, TraitBoundItem},
typing::{build_generics, Typing},
},
};
use std::{
fmt::{self, Display, Formatter},
rc::Rc,
};
pub fn example(input: &str) -> Html {
let class = Class {
name: String::from(input),
path: "AA".to_string(),
generic: vec![Typing::from("T"), Typing::from("U"), Typing::from("char")],
traits: vec![],
};
let class_traits =
RcList::from(
&["Debug", "Display", "Debug", "Display", "Debug", "Display", "Debug", "Display", "Debug", "Display"] as &[_]
);
let e = Extends {
id: 1,
generic: RcList::from(&["T", "U", "V", "R", "u8"] as &[_]),
version: String::new(),
class: Rc::new(class),
class_typing: RcList::from(&["X", "T", "Y", "char"] as &[_]),
class_traits: class_traits.clone(),
class_bounds: RcList(vec![
Rc::new(TraitBoundItem { left: Typing::from("T"), right: Trait::from("Display") }),
Rc::new(TraitBoundItem { left: Typing::from("U"), right: Trait::from("Debug") }),
]),
};
html! {
<>
{class_traits.build_table()}
<SignatureComponent::<Extends> data = e/>
</>
}
}
pub fn example2(input: &str) -> Html {
let class = Class {
name: String::from(input),
path: "AA".to_string(),
generic: vec![Typing::from("T"), Typing::from("U"), Typing::from("char")],
traits: vec![],
};
let e = Function {
name: String::from(input),
generic: vec![Typing::from("T"), Typing::from("V"), Typing::from("U")],
version: String::new(),
class: Rc::new(class),
parameters: Parameter::Array(vec![
Parameter::Zelf(Some(true)),
Parameter::Zelf(Some(false)),
Parameter::PositionOnly,
Parameter::Zelf(None),
Parameter::KeyValueOnly,
]),
};
html! {
<SignatureComponent::<Function> data = e/>
}
}