jb_alvarado
Lieutenant
- Registriert
- Sep. 2015
- Beiträge
- 596
Hallo Allerseits,
ich verwende in einem Open Source Projekt simplelog. In älteren Versionen hatte es chrono verwendet, was dann durch time ersetzt wurde.
Ich würde es aber gerne weiterhin mit chrono verwenden, und hatte dazu einen Pull Request gestartet. Grundsätzlich würde dieser akzeptiert werden, allerdings schaffe ich es nicht die Änderungswünsche umzusetzen, dazu fehlen mir leider die Fähigkeiten.
Jetzt wollte ich mal hier fragen, ob sich jemand vorstellen könnte, hier etwas Hand anzulegen? Mein Request gibt es hier: https://github.com/Drakulix/simplelog.rs/pull/109 , Änderungswünsche sind auch mit dabei.
Die Idee war ein enum zu erweitern und ein neues zu kreieren, um Funktionen für chrono und time gleichermaßen nutzen zu können:
Hängen tue ich jetzt einmal hier:
Wenn ich das richtig verstehe, sollen die Beiden zusammengefügt werden.
Und dann bekomme ich es nicht hin, diese Funktionen generisch zu machen und in einer abzubilden:
Ich denke es ist aber wichtig sich noch mal alle Kommentare beim Pull Request anzuschauen, um ein besseres Bild zu bekommen.
Kennt sich jemand gut mit chrono und time aus und könnte sich das mal anschauen?
ich verwende in einem Open Source Projekt simplelog. In älteren Versionen hatte es chrono verwendet, was dann durch time ersetzt wurde.
Ich würde es aber gerne weiterhin mit chrono verwenden, und hatte dazu einen Pull Request gestartet. Grundsätzlich würde dieser akzeptiert werden, allerdings schaffe ich es nicht die Änderungswünsche umzusetzen, dazu fehlen mir leider die Fähigkeiten.
Jetzt wollte ich mal hier fragen, ob sich jemand vorstellen könnte, hier etwas Hand anzulegen? Mein Request gibt es hier: https://github.com/Drakulix/simplelog.rs/pull/109 , Änderungswünsche sind auch mit dabei.
Die Idee war ein enum zu erweitern und ein neues zu kreieren, um Funktionen für chrono und time gleichermaßen nutzen zu können:
Rust:
// das ist erweitert
#[derive(Debug, Clone)]
pub enum TimeFormat {
Rfc2822,
Rfc3339,
#[cfg(feature = "chrono")]
Custom(Cow<'static, str>),
#[cfg(not(feature = "chrono"))]
Custom(&'static [time::format_description::FormatItem<'static>]),
}
// das ist neu
#[derive(Debug, Clone)]
pub enum TimeOffset {
#[cfg(feature = "chrono")]
Chrono(chrono::offset::FixedOffset),
#[cfg(not(feature = "chrono"))]
Time(time::UtcOffset),
}
Hängen tue ich jetzt einmal hier:
Rust:
#[cfg(feature = "chrono")]
pub fn set_time_format_custom(
&mut self,
time_format: Cow<'static, str>,
) -> &mut ConfigBuilder {
self.0.time_format = TimeFormat::Custom(time_format);
self
}
#[cfg(not(feature = "chrono"))]
pub fn set_time_format_custom(
&mut self,
time_format: &'static [FormatItem<'static>],
) -> &mut ConfigBuilder {
self.0.time_format = TimeFormat::Custom(time_format);
self
}
Wenn ich das richtig verstehe, sollen die Beiden zusammengefügt werden.
Und dann bekomme ich es nicht hin, diese Funktionen generisch zu machen und in einer abzubilden:
Rust:
#[cfg(feature = "chrono")]
#[inline(always)]
pub fn write_time<W>(write: &mut W, config: &Config) -> Result<(), Error>
where
W: Write + Sized,
{
let cur_time = if config.time_local {
(chrono::Local::now() + config.time_offset).format(&*config.time_format)
} else {
(chrono::Utc::now() + config.time_offset).format(&*config.time_format)
};
write!(write, "{} ", cur_time)?;
Ok(())
}
#[cfg(not(feature = "chrono"))]
#[inline(always)]
pub fn write_time<W>(write: &mut W, config: &Config) -> Result<(), Error>
where
W: Write + Sized,
{
use time::error::Format;
use time::format_description::well_known::*;
let time = time::OffsetDateTime::now_utc().to_offset(config.time_offset);
let res = match config.time_format {
TimeFormat::Rfc2822 => time.format_into(write, &Rfc2822),
TimeFormat::Rfc3339 => time.format_into(write, &Rfc3339),
TimeFormat::Custom(format) => time.format_into(write, &format),
};
match res {
Err(Format::StdIo(err)) => return Err(err),
Err(err) => panic!("Invalid time format: {}", err),
_ => {}
};
write!(write, " ")?;
Ok(())
}
Ich denke es ist aber wichtig sich noch mal alle Kommentare beim Pull Request anzuschauen, um ein besseres Bild zu bekommen.
Kennt sich jemand gut mit chrono und time aus und könnte sich das mal anschauen?