1use cdefmt_parser::metadata::{Level, Metadata};
7use rformat::{fmt::format::format_string, prelude::*};
8
9use crate::{var::Var, Result};
10
11#[derive(Clone, Debug)]
12pub struct Log<'elf> {
13 metadata: Metadata<'elf>,
14 args: Vec<Var>,
15}
16
17impl<'elf> Log<'elf> {
18 pub(crate) fn new(metadata: Metadata<'elf>, args: Vec<Var>) -> Self {
19 Self { metadata, args }
20 }
21
22 pub fn get_level(&self) -> Level {
23 self.metadata.level
24 }
25
26 pub fn get_file(&self) -> &str {
27 self.metadata.file
28 }
29
30 pub fn get_line(&self) -> usize {
31 self.metadata.line
32 }
33
34 pub fn get_args(&self) -> &[Var] {
35 &self.args
36 }
37}
38
39impl Log<'_> {
40 pub fn to_string(&self) -> Result<String> {
41 let params = self
42 .args
43 .iter()
44 .zip(self.metadata.names.iter())
45 .map(|(a, n)| rformat::fmt::format::Parameter {
46 identifier: n,
47 formattable: rformat::formattable::into_formattable!((*a)),
48 })
49 .collect::<Vec<_>>();
50
51 Ok(format_string(self.metadata.fmt, ¶ms)?)
52 }
53}