largeint 0.2.0

A library that supports large integer arithmetic.
Documentation
use largeint::*;

pub fn difference(large1: &str, large2: &str) -> String {
    let mut large1 = to_vec(&large1);
    let large2 = to_vec(&large2);
    let mut output_vec: Vec<u8> = Vec::new();
    let mut output_str =  String::from("");
    let len1 = large1.len();
    let len2 = large2.len();
    if len1 > len2 {
        let index = len1 - len2;
        for mut i in (0..len2).rev() {
            if large1[i + index] >= large2[i] {
                output_vec.insert(0, large1[i + index] - large2[i])
            } else if large2[i] > large1[i + index] {
                let i_2 = i;
                let mut count = 0;
                while i >= 1 && large2[i] >= large1[i + index]{
                    i = i - 1;
                    count = count + 1;
                } if i == 0 && large2[i] >= large1[i + index] {
                    let mut loopback = 0;
                    while large1[i + index - 1 - loopback] == 0 {
                        count = count + 1;
                        loopback = loopback + 1;
                    }
                    for _ in 0..count+1 {
                        large1[i + index - 1 - loopback] = large1[i + index - 1 - loopback] - 1;
                        large1[i + index - loopback] = large1[i + index - loopback] + 10;
                        if i < count {
                            i = i + 1;
                        }
                    }
                } else {
                    for _ in 0..count {
                        large1[i + index] = large1[i + index] - 1;
                        large1[i + index + 1] = large1[i + index + 1] + 10;
                        i = i + 1;
                    }
                }
                i = i_2;
                output_vec.insert(0, large1[i + index] - large2[i]);
                }
            }
            for k in (0..index).rev() {
                output_vec.insert(0, large1[k]);
        }
        output_str = vec_to_str(&output_vec);
        output_str = String::from(output_str.trim_left_matches("0"));
    } else if &large1.len() == &large2.len() {
            for mut i in (0..len1).rev() {
                if large1[i] >= large2[i] {
                    output_vec.insert(0, large1[i] - large2[i])
                } else if large2[i] > large1[i] {
                    let mut count = 0;
                    while i >= 1 && large2[i] >= large1[i]{
                        i = i - 1;
                        count = count + 1;
                    }
                        for _ in 0..count {
                        large1[i] = large1[i] - 1;
                        large1[i + 1] = large1[i + 1] + 10;
                        i = i + 1;
                        }
                    output_vec.insert(0, large1[i] - large2[i]);
                    }
                }
                output_str = vec_to_str(&output_vec);
                output_str = String::from(output_str.trim_left_matches("0"));
        }
        output_str
    }