http_file_parser 0.1.1

A Rust-based parser for .http files, parsing HTTP request data using Pest and making parsed requests.
Documentation
#[cfg(test)]
mod tests {
    use http_file_parser::parser::parse;

    #[test]
    fn test_valid_request() {
        let input = r#"### Some valid request
POST https://example.com/api/resource HTTP/1.1
Content-Type: application/json
Authorization: Bearer some_token

{"key": "value"}"#;

        let parsed = parse(input).unwrap();
        assert_eq!(parsed.requests.len(), 1);
        let request = &parsed.requests[0];
        assert_eq!(request.method.to_string(), "POST");
        assert_eq!(request.url, "https://example.com/api/resource");
        assert_eq!(request.version, "1.1");
        assert_eq!(request.body, r#"{"key": "value"}"#);
        assert!(request.headers.contains_key("Content-Type"));
        assert_eq!(request.headers["Content-Type"], "application/json");
    }

    #[test]
    fn test_get_request() {
        let input = r#"### Some GET request
GET /api/resource HTTP/1.1
Accept: application/json

"#;

        let parsed = parse(input).unwrap();
        assert_eq!(parsed.requests.len(), 1);
        let request = &parsed.requests[0];
        assert_eq!(request.method.to_string(), "GET");
        assert_eq!(request.url, "/api/resource");
        assert_eq!(request.version, "1.1");
        assert_eq!(request.body, "");
        assert!(request.headers.contains_key("Accept"));
        assert_eq!(request.headers["Accept"], "application/json");
    }

    #[test]
    fn test_multiple_requests() {
        let input = r#"### Request
GET /api/resource HTTP/1.1
Accept: application/json

### Another request

POST /api/resource HTTP/1.1
Content-Type: application/json

{"key": "value"}"#;

        let parsed = parse(input).unwrap();
        assert_eq!(parsed.requests.len(), 2);

        let get_request = &parsed.requests[0];
        assert_eq!(get_request.method.to_string(), "GET");
        assert_eq!(get_request.url, "/api/resource");

        let post_request = &parsed.requests[1];
        assert_eq!(post_request.method.to_string(), "POST");
        assert_eq!(post_request.url, "/api/resource");
        assert_eq!(post_request.body, r#"{"key": "value"}"#);
    }

    #[test]
    fn test_empty_body() {
        let input = r#"### Request with empty body
GET /api/resource HTTP/1.1
Accept: application/json

"#;

        let parsed = parse(input).unwrap();
        let request = &parsed.requests[0];
        assert_eq!(request.body, "");
    }

    #[test]
    fn test_delimiter() {
        let input = r#"### Request
GET /api/resource HTTP/1.1
Accept: application/json

### Another request

POST /api/resource HTTP/1.1
Content-Type: application/json

{"key": "value"}"#;

        let parsed = parse(input).unwrap();
        assert_eq!(parsed.requests.len(), 2);
    }

    #[test]
    fn test_headers_parsing() {
        let input = r#"### Request with headers
POST /api/resource HTTP/1.1
Content-Type: application/json
Authorization: Bearer token

"#;

        let parsed = parse(input).unwrap();
        let request = &parsed.requests[0];
        assert!(request.headers.contains_key("Content-Type"));
        assert_eq!(request.headers["Content-Type"], "application/json");
        assert!(request.headers.contains_key("Authorization"));
        assert_eq!(request.headers["Authorization"], "Bearer token");
    }
}