ligen_ir/path/
path_segment.rs

1use std::fmt::Display;
2
3use crate::{prelude::*, Identifier, Generics};
4
5#[derive(Default, Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
6pub struct PathSegment {
7    pub identifier: Identifier,
8    pub generics: Generics
9}
10
11impl PathSegment {
12    pub fn new(identifier: impl Into<Identifier>, generics: impl Into<Generics>) -> Self {
13        let identifier = identifier.into();
14        let generics = generics.into();
15        Self { identifier, generics }
16    }    
17}
18
19impl From<&str> for PathSegment {
20    fn from(value: &str) -> Self {
21        Identifier::from(value).into()
22    }
23}
24
25impl From<String> for PathSegment {
26    fn from(value: String) -> Self {
27        Identifier::from(value).into()
28    }
29}
30
31impl From<Identifier> for PathSegment {
32    fn from(identifier: Identifier) -> Self {
33        let generics = Default::default();
34        Self { identifier, generics }
35    }
36}
37
38impl Display for PathSegment {
39    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40        write!(f, "{}{}", self.identifier, self.generics)
41    }
42}