use std::fmt::Display;
use std::fmt::Formatter;
use std::fmt::Result;
use crate::search::Marker;
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub struct Markers(Vec<Marker>);
impl Markers {
pub fn new(markers: impl Into<Vec<Marker>>) -> Self {
Self(markers.into())
}
pub fn as_slice(&self) -> &[Marker] {
&self.0
}
}
impl Display for Markers {
fn fmt(&self, formatter: &mut Formatter<'_>) -> Result {
let markers: Vec<String> = self.0.iter().map(|marker| format!("`{marker}`")).collect();
formatter.write_str(&markers.join(", "))
}
}
#[cfg(test)]
mod tests {
#![allow(clippy::missing_panics_doc)]
use super::*;
#[test]
fn trait_display() {
let markers = Markers::new(vec![Marker::from(".git"), Marker::from("src/main.rs")]);
let display = markers.to_string();
assert_eq!(display, "`.git`, `src/main.rs`");
}
}