# Bonds_rs Crate This crate provides structures and methods for evaluating and dealing with various corporate bonds. ## Bond Trait The `Bond` trait defines the behavior of a financial bond. ### Methods - `fn coupon_payment(&self) -> f64`: Computes the total coupon payments over the bond's lifespan. - `fn present_value(&self) -> f64`: Calculates the present value of the bond. - `fn holding_period_return(&self) -> f64`: Computes the holding period return of the bond. - `fn yeild_to_maturity(&self) -> f64`: Calculates the yield to maturity of the bond. ## CorporateBond Struct The `CorporateBond` struct represents a corporate bond, implementing the `Bond` trait. ### Fields - `coupon_rate`: The annual coupon rate of the bond. - `discount_rate`: The annual discount rate (interest rate) used in bond valuation. - `maturity`: The maturity period of the bond in years. - `face_value`: The nominal value of the bond. - `compounding_freq`: The frequency at which interest is compounded (e.g., Annual, Semiannual, etc.). - `buying_price`: The buying price of the bond (optional). - `current_selling_price`: The current selling price of the bond (optional). - `effective_annual_rate`: The effective annual rate based on the compounding frequency. ### Methods - `fn new(...)` (constructor): Creates a new `CorporateBond` instance with the specified parameters. - `fn coupon_payment(&self) -> f64`: Computes the total coupon payments over the bond's lifespan. - `fn present_value(&self) -> f64`: Calculates the present value of the bond. - `fn holding_period_return(&self) -> f64`: Computes the holding period return of the bond. - `fn yeild_to_maturity(&self) -> f64`: Calculates the yield to maturity of the bond. ## CompoundingFreq Enum The `CompoundingFreq` enum represents the compounding frequency of interest rates for a bond. ### Variants - `Annual`: Interest is compounded annually. - `Semiannual`: Interest is compounded semiannually. - `Quarterly`: Interest is compounded quarterly. - `Monthly`: Interest is compounded monthly. ## Examples ```rust use bonds_rs::{CorporateBond, CompoundingFreq, Bond}; fn main() { let bond = CorporateBond::new( 5.0, //coupon rate (in %) 3.0, //discount rate (in %) 2, //maturity (in years) 1000.0, //face value CompoundingFreq::Biannual, Some(1000.0), //buying price Some(942.1843778588191), //current selling price ); assert_eq!(bond.coupon_payment(), 96.35961618879344); assert_eq!(bond.present_value(), 1038.543846475518); assert_eq!(bond.yeild_to_maturity(), 3.022491931915283); assert_eq!(bond.holding_period_return(), 3.854399404761266); } ```