ligen_ir/path/
path_segment.rs1use 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}