Documentation
use crate::model::InlinesContext;

use crate::model::graph::{to_plain_text, GraphInlines};
use crate::model::{Key, LineId};

#[derive(Clone, Debug, PartialEq)]
pub struct Line {
    id: LineId,
    inlines: GraphInlines,
}

impl Line {
    pub fn new(id: LineId, inlines: GraphInlines) -> Line {
        Line { id, inlines }
    }

    pub fn id(&self) -> LineId {
        self.id
    }

    pub fn to_plain_text(&self) -> String {
        to_plain_text(&self.inlines)
    }

    pub fn inlines(&self) -> &GraphInlines {
        &self.inlines
    }

    pub fn ref_keys(&self) -> Vec<Key> {
        self.inlines.iter().flat_map(|i| i.ref_keys()).collect()
    }

    pub fn normalize(&self, context: impl InlinesContext) -> GraphInlines {
        self.inlines.iter().map(|i| i.normalize(context)).collect()
    }
}