fone 0.1.2

fone is a rust dev helper
Documentation
# Fone Crate

[![Crates.io](https://img.dart.xin/crates/v/fone.svg)](https://crates.io/crates/fone)
[![Documentation](https://docs.rs/fone/badge.svg)](https://docs.rs/fone)

The `fone` crate is a lightweight utility library for Rust that provides:

- **Arithmetic Operations**: Simple functions for performing basic math.
- **Logging Utilities**: Macros for in-memory and file-based logging with support for different severity levels.

## Features

- **Arithmetic Utilities**:
  
  - [add]https://docs.rs/fone: Adds two integers.

- **Logging Utilities**:
  
  - In-memory logging: `logi!`, `logd!`, `logw!`, `loge!`
  - File-based logging: `logfi!`, `logfd!`, `logfw!`, `logfe!`

## Installation

Add the following to your `Cargo.toml`:

```toml
[dependencies]
fone = "a.b.c"
```

## Testing

To run the test suite:

```bash
cargo test -v
cargo test -- --show-output
cargo test test_t -v -- --show-output
```

### Usage

```rust
use fone::add;

fn main() {
    let result = add(2, 2);
    println!("Result: {}", result);
}
```

```rust
use fone::{logi, logd, logw, loge};

fn main() {
    logi!("Application initialized");
    logd!("Configuration loaded");
    logw!("Deprecated API used");
    loge!("Critical system failure");
}
```

```rust
use fone::{logfi, logfd, logfw, logfe};

fn main() {
    logfi!("Application initialized");
    logfd!("Configuration loaded");
    logfw!("Deprecated API used");
    logfe!("Critical system failure");
}
```

```rust
start_format_time(None);
start_format_time(Some(1800));  // UTC+0.5
start_format_time(Some(3600));  // UTC+1
start_format_time(Some(3600 * 8));  // UTC+1
fn start_format_time(time_zone_offset: Option<i32>) {
    // Get current timestamp with nanoseconds precision
    let now = SystemTime::now()
        .duration_since(UNIX_EPOCH)
        .expect("Time went backwards");
    let timestamp = now.as_secs();
    let nanos = now.subsec_nanos(); // Get fractional part in nanoseconds
    let timestamp_with_millis = timestamp * 1_000 + (nanos / 1_000_000) as u64; // Convert to milliseconds

    // Convert timestamp to `DateTime` with optional time zone offset
    let date_time = DateTime::from_timestamp(timestamp_with_millis, time_zone_offset);

    // Print formatted date and time
    let format_date = "%Y-%m-%d"; // YYYY-MM-DD
    let format_datetime = "%Y-%m-%d %H:%M"; // YYYY-MM-DD HH:MM
    let format_datetime_seconds = "%Y-%m-%d %H:%M:%S"; // YYYY-MM-DD HH:MM:SS
    let format_datetime_millis = "%Y-%m-%d %H:%M:%S.%f"; // YYYY-MM-DD HH:MM:SS.sss

    println!("==========The Now Time:=========");
    // Get current time with no time zone offset (UTC)
    let current_time = DateTime::now(None);
    // Print individual components
    println!("Current Time Components:");
    current_time.print_components();
    // Format and print the current time
    let formatted_time = current_time.format("%Y-%m-%d %H:%M:%S.%f");
    println!("Formatted Current Time: {}", formatted_time);

    println!("==========The Time:=========");
    println!("Timestamp:{}, timestamp_with_millis:{}, time_zone_offset:{:?}", timestamp, timestamp_with_millis, time_zone_offset);
    println!("Date: {}", date_time.format(format_date));
    println!("DateTime: {}", date_time.format(format_datetime));
    println!("DateTime with Seconds: {}", date_time.format(format_datetime_seconds));
    println!("DateTime with Milliseconds: {}", date_time.format(format_datetime_millis));

    println!("Time Zone: {}", date_time.get_time_zone());
    println!("Year: {}", date_time.get_year());
    println!("Month: {}", date_time.get_month());
    println!("Day: {}", date_time.get_day());
    println!("Hour: {}", date_time.get_hour());
    println!("Minute: {}", date_time.get_minute());
    println!("Second: {}", date_time.get_second());
    println!("Millisecond: {}", date_time.get_millisecond());
    

    // Print individual components
    // println!("\nIndividual Components:");
    // date_time.print_components();

    println!("======The Time Zone======");
    // Create a DateTime object with a specific time zone offset (e.g., UTC+1)
    let timestamp = 1_696_500_000_000; // Example timestamp
    let date_time = DateTime::from_timestamp(timestamp, Some(3600)); // UTC+1

    // Get and print the time zone
    let time_zone = date_time.get_time_zone();
    println!("Time Zone: {}", time_zone);

    // Example with negative offset (e.g., UTC-5)
    let date_time_negative = DateTime::from_timestamp(timestamp, Some(-18000)); // UTC-5
    let time_zone_negative = date_time_negative.get_time_zone();
    println!("Time Zone: {}", time_zone_negative);
}
```

## Documentation

Generate and view the documentation locally:

```bash
cargo doc --open
```

For online documentation, visit [docs.rs/fone](https://docs.rs/fone).

## Contributing

Contributions are welcome! Please ensure that:

- New features include appropriate tests.
- Documentation is updated for all public APIs.
- Code adheres to Rust best practices and formatting standards.

## License

This project is licensed under the MIT License. See [LICENSE](LICENSE) for details.

```