Make account templates owned

korrat
Jan 3, 2023, 6:26 PM
YBARPI2BY5EJYD3HKDWLXHZIL7CS3V3KT5O5UJVB2ICICP7O6BLQC

Dependencies

  • [2] SMBQYFPG Enable access to timestamps for directives
  • [3] R7S2CWF7 Add type for account segments
  • [4] W3MWSSJ7 Add a templating engine for accounts
  • [5] YDK6X6PP add a library of important types for beancount
  • [6] 2JBFREZG enable additional warnings
  • [7] 4UOASAH3 Make Acc and AccountTemplate zero-copy deserializable

Change contents

  • edit in common/beancount-types/tests/account_template.rs at line 1
    [3.6783]
    [3.6784]
    use core::str::FromStr;
  • replacement in common/beancount-types/tests/account_template.rs at line 7
    [3.6865][3.6865:6928]()
    #[derive(Clone, Copy, Debug)]
    struct AnySelector<'t>(&'t str);
    [3.6865]
    [3.6928]
    #[derive(Clone, Debug)]
    struct AnySelector(String);
  • replacement in common/beancount-types/tests/account_template.rs at line 10
    [3.6929][3.6929:7014]()
    impl<'t> TryFrom<&'t str> for AnySelector<'t> {
    type Error = NeverSelectorError;
    [3.6929]
    [3.7014]
    impl FromStr for AnySelector {
    type Err = NeverSelectorError;
  • replacement in common/beancount-types/tests/account_template.rs at line 13
    [3.7015][3.7015:7122]()
    fn try_from(value: &'t str) -> Result<Self, Self::Error> {
    Ok(Self(value.try_into().unwrap()))
    [3.7015]
    [3.7122]
    fn from_str(value: &str) -> Result<Self, Self::Err> {
    Ok(Self(value.into()))
  • replacement in common/beancount-types/tests/account_template.rs at line 24
    [3.7247][3.7247:7326]()
    impl<'t> TryFrom<&'t str> for NoSelector {
    type Error = SelectorError<'t>;
    [3.7247]
    [3.7326]
    impl FromStr for NoSelector {
    type Err = SelectorError;
  • replacement in common/beancount-types/tests/account_template.rs at line 27
    [3.7327][3.7327:7433]()
    fn try_from(selector: &'t str) -> Result<Self, Self::Error> {
    Err(SelectorError { selector })
    [3.7327]
    [3.7433]
    fn from_str(selector: &str) -> Result<Self, Self::Err> {
    SelectorSnafu { selector }.fail()
  • replacement in common/beancount-types/tests/account_template.rs at line 33
    [3.7478][3.7478:7528]()
    struct SelectorError<'t> {
    selector: &'t str,
    [3.7478]
    [3.7528]
    struct SelectorError {
    selector: String,
  • replacement in common/beancount-types/src/account.rs at line 335
    [3.16993][3.16993:17017]()
    #[derive(Clone, Debug)]
    [3.16993]
    [3.17017]
    #[derive(Clone, Debug, Deserialize)]
  • edit in common/beancount-types/src/account.rs at line 337
    [3.17038]
    [3.17038]
    #[serde(try_from = "String")]
  • edit in common/beancount-types/src/account.rs at line 401
    [3.18620]
    [3.18620]
    }
    }
    impl From<&Account> for Account {
    #[inline]
    fn from(value: &Account) -> Self {
    value.clone()
  • edit in common/beancount-types/src/account/template.rs at line 3
    [3.9826]
    [3.9826]
    use core::str::FromStr;
  • edit in common/beancount-types/src/account/template.rs at line 13
    [3.9989][3.9989:10005]()
    use crate::Acc;
  • replacement in common/beancount-types/src/account/template.rs at line 17
    [3.10078][3.10078:10100]()
    pub enum Error<'t, E>
    [3.10078]
    [3.10100]
    pub enum Error<E>
  • replacement in common/beancount-types/src/account/template.rs at line 30
    [3.10368][3.10368:10395]()
    template: &'t str,
    [3.10368]
    [3.10395]
    template: String,
  • replacement in common/beancount-types/src/account/template.rs at line 65
    [3.10999][3.374:404]()
    #[derive(Debug, Deserialize)]
    [3.10999]
    [3.404]
    #[derive(Clone, Debug, Deserialize)]
  • replacement in common/beancount-types/src/account/template.rs at line 67
    [3.413][3.413:528]()
    bound = "'de: 't, Selector: TryFrom<&'t str>, Selector::Error: 'static + Diagnostic",
    try_from = "&'t str"
    [3.413]
    [3.528]
    bound = "Selector: FromStr, Selector::Err: 'static + Diagnostic",
    try_from = "String"
  • replacement in common/beancount-types/src/account/template.rs at line 70
    [3.531][3.11016:11113](),[3.11016][3.11016:11113]()
    pub struct Template<'t, Selector> {
    base: &'t Acc,
    segments: Vec<Segment<'t, Selector>>,
    [3.531]
    [3.11113]
    pub struct Template<Selector> {
    base: Account,
    segments: Vec<Segment<Selector>>,
  • replacement in common/beancount-types/src/account/template.rs at line 75
    [3.11116][3.11116:11158]()
    impl<'t, Selector> Template<'t, Selector>
    [3.11116]
    [3.11158]
    impl<Selector> Template<Selector>
  • replacement in common/beancount-types/src/account/template.rs at line 77
    [3.11164][3.11164:11229]()
    Selector: TryFrom<&'t str>,
    Selector::Error: Diagnostic,
    [3.11164]
    [3.11229]
    Selector: FromStr,
    Selector::Err: Diagnostic,
  • replacement in common/beancount-types/src/account/template.rs at line 80
    [3.11231][3.11231:11313]()
    pub fn parse(template: &'t str) -> Result<Self, Error<'t, Selector::Error>> {
    [3.11231]
    [3.11313]
    pub fn parse(template: &str) -> Result<Self, Error<Selector::Err>> {
  • replacement in common/beancount-types/src/account/template.rs at line 111
    [3.12212][3.12212:12256]()
    impl<'t, Selector> Template<'t, Selector> {
    [3.12212]
    [3.12256]
    impl<'t, Selector> Template<Selector> {
  • edit in common/beancount-types/src/account/template.rs at line 115
    [3.12392][3.12392:12414]()
    Selector: 't,
  • replacement in common/beancount-types/src/account/template.rs at line 117
    [3.12488][3.12488:12531]()
    Segment::Literal(seg) => *seg,
    [3.12488]
    [3.12531]
    Segment::Literal(seg) => seg,
  • replacement in common/beancount-types/src/account/template.rs at line 121
    [3.12612][3.12612:12675](),[3.12675][2.1538:1572](),[2.1572][3.12710:12721](),[3.12710][3.12710:12721]()
    fields.fold(self.base.to_owned(), |account, segment| {
    account.join(segment)
    })
    [3.12612]
    [3.532]
    fields.fold(self.base.clone(), Account::join)
  • replacement in common/beancount-types/src/account/template.rs at line 125
    [3.541][3.541:593]()
    impl<'t, Selector> Clone for Template<'t, Selector>
    [3.541]
    [3.593]
    impl<Selector> TryFrom<&str> for Template<Selector>
  • replacement in common/beancount-types/src/account/template.rs at line 127
    [3.599][3.599:620]()
    Selector: Clone,
    [3.599]
    [3.620]
    Selector: FromStr,
    Selector::Err: 'static + Diagnostic,
  • replacement in common/beancount-types/src/account/template.rs at line 130
    [3.622][3.622:751]()
    fn clone(&self) -> Self {
    Self {
    base: self.base,
    segments: self.segments.clone(),
    }
    [3.622]
    [3.12721]
    type Error = Error<Selector::Err>;
    fn try_from(template: &str) -> Result<Self, Self::Error> {
    Self::parse(template)
  • replacement in common/beancount-types/src/account/template.rs at line 137
    [3.12730][3.12730:12793]()
    impl<'t, Selector> TryFrom<&'t str> for Template<'t, Selector>
    [3.12730]
    [3.12793]
    impl<Selector> TryFrom<String> for Template<Selector>
  • replacement in common/beancount-types/src/account/template.rs at line 139
    [3.12799][3.12799:12874]()
    Selector: TryFrom<&'t str>,
    Selector::Error: 'static + Diagnostic,
    [3.12799]
    [3.12874]
    Selector: FromStr,
    Selector::Err: 'static + Diagnostic,
  • replacement in common/beancount-types/src/account/template.rs at line 142
    [3.12876][3.12876:12921]()
    type Error = Error<'t, Selector::Error>;
    [3.12876]
    [3.12921]
    type Error = Error<Selector::Err>;
  • replacement in common/beancount-types/src/account/template.rs at line 144
    [3.12922][3.12922:13018]()
    fn try_from(template: &'t str) -> Result<Self, Self::Error> {
    Self::parse(template)
    [3.12922]
    [3.13018]
    fn try_from(template: String) -> Result<Self, Self::Error> {
    Self::parse(&template)
  • replacement in common/beancount-types/src/account/template.rs at line 150
    [3.13051][3.13051:13113]()
    pub(crate) enum Segment<'t, Selector> {
    Literal(&'t Seg),
    [3.13051]
    [3.13113]
    pub(crate) enum Segment<Selector> {
    Literal(crate::Segment),
  • replacement in common/beancount-types/src/account/template.rs at line 155
    [3.13140][3.13140:13181]()
    impl<'t, Selector> Segment<'t, Selector>
    [3.13140]
    [3.13181]
    impl<Selector> Segment<Selector>
  • replacement in common/beancount-types/src/account/template.rs at line 157
    [3.13187][3.13187:13262]()
    Selector: TryFrom<&'t str>,
    Selector::Error: 'static + Diagnostic,
    [3.13187]
    [3.13262]
    Selector: FromStr,
    Selector::Err: Diagnostic,
  • replacement in common/beancount-types/src/account/template.rs at line 160
    [3.13264][3.13264:13362]()
    fn parse(segment: &'t str, span: SourceSpan) -> Result<Self, ParsingError<Selector::Error>> {
    [3.13264]
    [3.13362]
    fn parse(segment: &str, span: SourceSpan) -> Result<Self, ParsingError<Selector::Err>> {
  • replacement in common/beancount-types/src/account/template.rs at line 165
    [3.13531][3.13531:13563]()
    .try_into()
    [3.13531]
    [3.13563]
    .parse()
  • replacement in common/beancount-types/src/account/template.rs at line 169
    [3.13657][3.13657:13695]()
    <&Seg>::try_from(segment)
    [3.13657]
    [3.13695]
    crate::Segment::try_from(segment)
  • replacement in common/beancount-types/src/account/template.rs at line 176
    [3.13802][3.13802:13899]()
    impl<'t, Selector> From<&'t Seg> for Segment<'t, Selector> {
    fn from(seg: &'t Seg) -> Self {
    [3.13802]
    [3.13899]
    impl<Selector> From<crate::Segment> for Segment<Selector> {
    fn from(seg: crate::Segment) -> Self {
  • replacement in common/beancount-types/src/account/template.rs at line 182
    [3.13935][3.13935:14000]()
    fn parse_trailing_segments<'t, Selector>(
    segments: &'t str,
    [3.13935]
    [3.14000]
    fn parse_trailing_segments<Selector>(
    segments: &str,
  • replacement in common/beancount-types/src/account/template.rs at line 185
    [3.14027][3.14027:14099]()
    ) -> Result<Vec<Segment<Selector>>, Vec<ParsingError<Selector::Error>>>
    [3.14027]
    [3.14099]
    ) -> Result<Vec<Segment<Selector>>, Vec<ParsingError<Selector::Err>>>
  • replacement in common/beancount-types/src/account/template.rs at line 187
    [3.14105][3.14105:14170]()
    Selector: TryFrom<&'t str>,
    Selector::Error: Diagnostic,
    [3.14105]
    [3.14170]
    Selector: FromStr,
    Selector::Err: Diagnostic,