bonds_rs 0.1.1

This crate contains the most common operations in bond valuations
Documentation
# 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);
    }
```