pub struct CurrencyAccountsPlugin { /* private fields */ }Expand description
Plugin that auto-generates currency trading account postings.
Implements the currency trading accounts method as in Python beancount’s
beancount.plugins.currency_accounts. For transactions that mix multiple
currencies and use price annotations, this plugin:
- Groups postings by
cost.currency(if the posting has a cost) orunits.currency(otherwise). Price currency is never used as the group key — this matches Python’sgroup_postings_by_weight_currency. - If there is at least one price annotation in the transaction and
there are two or more distinct group keys, inserts a neutralizing
posting for each group. The neutralizing posting goes to
<base>:<group_key>and carries the negated weight inventory of that group (denominated in the weight/cost currency, which may differ from the group key). - Unlike Python’s plugin, does NOT strip
priceannotations from the original postings. Python strips them because its pipeline runs plugins before booking; rustledger runs booking first, so stripping prices would cause balance-check failures (E3001) in the post-plugin validator. - Emits
opendirectives at the earliest transaction date for all newly created currency trading accounts.
Implementations§
Source§impl CurrencyAccountsPlugin
impl CurrencyAccountsPlugin
Sourcepub const fn with_base_account(base_account: String) -> Self
pub const fn with_base_account(base_account: String) -> Self
Create with custom base account.
Trait Implementations§
Source§impl Default for CurrencyAccountsPlugin
impl Default for CurrencyAccountsPlugin
Source§impl NativePlugin for CurrencyAccountsPlugin
impl NativePlugin for CurrencyAccountsPlugin
Source§fn description(&self) -> &'static str
fn description(&self) -> &'static str
Plugin description.
Source§fn process(&self, input: PluginInput) -> PluginOutput
fn process(&self, input: PluginInput) -> PluginOutput
Process directives and return modified directives + errors.
Auto Trait Implementations§
impl Freeze for CurrencyAccountsPlugin
impl RefUnwindSafe for CurrencyAccountsPlugin
impl Send for CurrencyAccountsPlugin
impl Sync for CurrencyAccountsPlugin
impl Unpin for CurrencyAccountsPlugin
impl UnsafeUnpin for CurrencyAccountsPlugin
impl UnwindSafe for CurrencyAccountsPlugin
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.