umya-spreadsheet 2.3.3

umya-spreadsheet is a library written in pure Rust to read and write xlsx file.
Documentation
use std::borrow::Cow;

use crate::helper::date::*;
use crate::structs::Color;
use crate::structs::NumberingFormat;
use fancy_regex::Captures;
use fancy_regex::Matches;
use fancy_regex::Regex;
use thousands::Separable;

pub(crate) fn format_as_fraction(value: &f64, format: &str) -> String {
    let sign = if value < &0f64 { "-" } else { "" };

    let integer_part = value.abs().floor();
    let decimal_part = (value.abs() % 1f64)
        .to_string()
        .replace("0.", "")
        .parse::<f64>()
        .unwrap();
    let decimal_length = decimal_part.to_string().len();
    let decimal_divisor = 10f64.powi(decimal_length as i32);

    let gcd = gcd(&decimal_part, &decimal_divisor);

    let mut adjusted_decimal_part = decimal_part / gcd;
    let adjusted_decimal_divisor = decimal_divisor / gcd;

    let result: String;
    if format.contains('0') {
        return format!(
            "{}{} {}/{}",
            &sign, &integer_part, &adjusted_decimal_part, &adjusted_decimal_divisor
        );
    }

    if format.contains('#') {
        if integer_part == 0f64 {
            result = format!(
                "{}{}/{}",
                &sign, &adjusted_decimal_part, &adjusted_decimal_divisor
            );
        } else {
            result = format!(
                "{}{} {}/{}",
                &sign, &integer_part, &adjusted_decimal_part, &adjusted_decimal_divisor
            );
        }
        return result;
    }

    let check_format: String = format.chars().take(3).collect();
    if check_format == "? ?" {
        let mut integer_part_str = integer_part.to_string();
        if integer_part == 0f64 {
            integer_part_str = String::new();
        }
        result = format!(
            "{}{} {}/{}",
            &sign, &integer_part_str, &adjusted_decimal_part, &adjusted_decimal_divisor
        );
    } else {
        adjusted_decimal_part += integer_part * adjusted_decimal_divisor;
        result = format!(
            "{}{}/{}",
            &sign, &adjusted_decimal_part, &adjusted_decimal_divisor
        );
    }

    result
}

#[inline]
fn gcd(a: &f64, b: &f64) -> f64 {
    if b == &0f64 {
        *a
    } else {
        gcd(b, &(a % b))
    }
}