anicca 0.1.0

Libary and CLI to diff two OpenAPI description documents
Documentation
use super::schema::SchemaPrinter;
use crate::diff::request_body::RequestBodyDiff;

pub struct RequestBodyPrinter<'a> {
    pub request_body: &'a RequestBodyDiff,
}

impl<'a> RequestBodyPrinter<'a> {
    pub fn print(&self) -> String {
        let mut result = String::new();

        if self.request_body.added.is_some() {
            result.push_str("Request body was added.\n");
        }

        if self.request_body.removed.is_some() {
            result.push_str("Request body was added.\n");
        }

        if let Some(content_diff) = &self.request_body.content_changed {
            for media_type_pair in &content_diff.added {
                result.push_str(&format!(
                    "  - Request body media type {} was added.\n",
                    media_type_pair.0
                ));
            }

            for media_type_pair in &content_diff.removed {
                result.push_str(&format!(
                    "  - Request body media type {} was removed.\n",
                    media_type_pair.0
                ));
            }

            for (media_type, media_type_diff) in &content_diff.changed {
                result.push_str(&format!(
                    "  - Request body media type {} changed:.\n",
                    media_type
                ));

                if let Some(schema_diff) = &media_type_diff.schema_changed {
                    let schema = SchemaPrinter {
                        diff: &schema_diff,
                        indent: 4,
                    }
                    .print();
                    result.push_str(&schema);
                }
            }
        }

        result
    }
}