feignhttp 0.6.1

Declarative HTTP client for rust
Documentation
#![allow(unused_imports)]
use std::fs::File;
use std::path::PathBuf;

#[cfg(feature = "multipart")]
use feignhttp::{multipart, post};

#[cfg(feature = "multipart")]
#[post("https://httpbin.org/post")]
async fn upload_file(
    #[file("file")] file: PathBuf,
    #[part("name")] name: &str,
    #[part("desc")] desc: &str,
) -> feignhttp::Result<String> {
}

#[cfg(feature = "multipart")]
#[post("https://httpbin.org/post")]
async fn upload_file_with_content_type(
    #[file("file", content_type = "image/png")] file: File,
    #[part("name")] name: &str,
    #[part("desc")] desc: &str,
) -> feignhttp::Result<String> {
}

#[cfg(feature = "multipart")]
#[post("https://httpbin.org/post")]
async fn upload_bytes_with_content_type(
    #[file("file", filename = "logo.svg", content_type = "image/svg+xml")] file: Vec<u8>,
    #[file("data", content_type = "text/plain")] data: Vec<u8>,
    #[part("name")] name: &str,
) -> feignhttp::Result<String> {
}

#[tokio::test]
async fn test_send_multipart() {
    #[cfg(feature = "multipart")]
    {
        let r = upload_file(
            PathBuf::from("examples/crab.png"),
            "test.png",
            "a test file",
        )
        .await
        .unwrap();
        println!("upload result: {}", r);

        let r = upload_file_with_content_type(
            File::open("examples/crab.png").unwrap(),
            "test.png",
            "a test file",
        )
        .await
        .unwrap();
        println!("upload_file_with_content_type result: {}", r);

        // The Vec<u8> from https://www.rust-lang.org/static/images/rust-logo-blk.svg.
        let file_u8 = vec![
            60, 115, 118, 103, 32, 104, 101, 105, 103, 104, 116, 61, 34, 49, 52, 52, 34, 32, 119,
            105, 100, 116, 104, 61, 34, 49, 52, 52, 34, 32, 120, 109, 108, 110, 115, 61, 34, 104,
            116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 50, 48,
            48, 48, 47, 115, 118, 103, 34, 62, 60, 112, 97, 116, 104, 32, 100, 61, 34, 109, 55, 49,
            46, 48, 53, 32, 50, 51, 46, 54, 56, 99, 45, 50, 54, 46, 48, 54, 32, 48, 45, 52, 55, 46,
            50, 55, 32, 50, 49, 46, 50, 50, 45, 52, 55, 46, 50, 55, 32, 52, 55, 46, 50, 55, 115,
            50, 49, 46, 50, 50, 32, 52, 55, 46, 50, 55, 32, 52, 55, 46, 50, 55, 32, 52, 55, 46, 50,
            55, 32, 52, 55, 46, 50, 55, 45, 50, 49, 46, 50, 50, 32, 52, 55, 46, 50, 55, 45, 52, 55,
            46, 50, 55, 45, 50, 49, 46, 50, 50, 45, 52, 55, 46, 50, 55, 45, 52, 55, 46, 50, 55, 45,
            52, 55, 46, 50, 55, 122, 109, 45, 46, 48, 55, 32, 52, 46, 50, 97, 51, 46, 49, 32, 51,
            46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 51, 46, 48, 50, 32, 51, 46, 49, 49, 32, 51, 46,
            49, 49, 32, 51, 46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 45, 54, 46, 50, 50, 32, 48, 32,
            51, 46, 49, 49, 32, 51, 46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 51, 46, 50, 45, 51, 46,
            49, 49, 122, 109, 55, 46, 49, 50, 32, 53, 46, 49, 50, 97, 51, 56, 46, 50, 55, 32, 51,
            56, 46, 50, 55, 32, 48, 32, 48, 32, 49, 32, 50, 54, 46, 50, 32, 49, 56, 46, 54, 54,
            108, 45, 51, 46, 54, 55, 32, 56, 46, 50, 56, 99, 45, 46, 54, 51, 32, 49, 46, 52, 51,
            46, 48, 50, 32, 51, 46, 49, 49, 32, 49, 46, 52, 52, 32, 51, 46, 55, 53, 108, 55, 46,
            48, 54, 32, 51, 46, 49, 51, 97, 51, 56, 46, 50, 55, 32, 51, 56, 46, 50, 55, 32, 48, 32,
            48, 32, 49, 32, 46, 48, 56, 32, 54, 46, 54, 52, 104, 45, 51, 46, 57, 51, 99, 45, 46,
            51, 57, 32, 48, 45, 46, 53, 53, 46, 50, 54, 45, 46, 53, 53, 46, 54, 52, 118, 49, 46,
            56, 99, 48, 32, 52, 46, 50, 52, 45, 50, 46, 51, 57, 32, 53, 46, 49, 55, 45, 52, 46, 52,
            57, 32, 53, 46, 52, 45, 50, 32, 46, 50, 51, 45, 52, 46, 50, 49, 45, 46, 56, 52, 45, 52,
            46, 52, 57, 45, 50, 46, 48, 54, 45, 49, 46, 49, 56, 45, 54, 46, 54, 51, 45, 51, 46, 49,
            52, 45, 56, 46, 48, 52, 45, 54, 46, 50, 52, 45, 49, 48, 46, 52, 57, 32, 51, 46, 56, 53,
            45, 50, 46, 52, 52, 32, 55, 46, 56, 53, 45, 54, 46, 48, 53, 32, 55, 46, 56, 53, 45, 49,
            48, 46, 56, 55, 32, 48, 45, 53, 46, 50, 49, 45, 51, 46, 53, 55, 45, 56, 46, 52, 57, 45,
            54, 45, 49, 48, 46, 49, 45, 51, 46, 52, 50, 45, 50, 46, 50, 53, 45, 55, 46, 50, 45, 50,
            46, 55, 45, 56, 46, 50, 50, 45, 50, 46, 55, 104, 45, 52, 48, 46, 54, 97, 51, 56, 46,
            50, 55, 32, 51, 56, 46, 50, 55, 32, 48, 32, 48, 32, 49, 32, 50, 49, 46, 52, 49, 45, 49,
            50, 46, 48, 56, 108, 52, 46, 55, 57, 32, 53, 46, 48, 50, 99, 49, 46, 48, 56, 32, 49,
            46, 49, 51, 32, 50, 46, 56, 55, 32, 49, 46, 49, 56, 32, 52, 32, 46, 48, 57, 122, 109,
            45, 52, 52, 46, 50, 32, 50, 51, 46, 48, 50, 97, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32,
            48, 32, 48, 32, 49, 32, 51, 46, 48, 50, 32, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32, 51,
            46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 45, 54, 46, 50, 50, 32, 48, 32, 51, 46, 49, 49,
            32, 51, 46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 51, 46, 50, 45, 51, 46, 49, 49, 122,
            109, 55, 52, 46, 49, 53, 46, 49, 52, 97, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32, 48,
            32, 48, 32, 49, 32, 51, 46, 48, 50, 32, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32, 51, 46,
            49, 49, 32, 48, 32, 48, 32, 49, 32, 45, 54, 46, 50, 50, 32, 48, 32, 51, 46, 49, 49, 32,
            51, 46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 51, 46, 50, 45, 51, 46, 49, 49, 122, 109,
            45, 54, 56, 46, 50, 57, 46, 53, 104, 53, 46, 52, 50, 118, 50, 52, 46, 52, 52, 104, 45,
            49, 48, 46, 57, 52, 97, 51, 56, 46, 50, 55, 32, 51, 56, 46, 50, 55, 32, 48, 32, 48, 32,
            49, 32, 45, 49, 46, 50, 52, 45, 49, 52, 46, 54, 49, 108, 54, 46, 55, 45, 50, 46, 57,
            56, 99, 49, 46, 52, 51, 45, 46, 54, 52, 32, 50, 46, 48, 56, 45, 50, 46, 51, 49, 32, 49,
            46, 52, 52, 45, 51, 46, 55, 52, 122, 109, 50, 50, 46, 54, 50, 46, 50, 54, 104, 49, 50,
            46, 57, 49, 99, 46, 54, 55, 32, 48, 32, 52, 46, 55, 49, 46, 55, 55, 32, 52, 46, 55, 49,
            32, 51, 46, 56, 32, 48, 32, 50, 46, 53, 49, 45, 51, 46, 49, 32, 51, 46, 52, 49, 45, 53,
            46, 54, 53, 32, 51, 46, 52, 49, 104, 45, 49, 49, 46, 57, 56, 122, 109, 48, 32, 49, 55,
            46, 53, 54, 104, 57, 46, 56, 57, 99, 46, 57, 32, 48, 32, 52, 46, 56, 51, 46, 50, 54,
            32, 54, 46, 48, 56, 32, 53, 46, 50, 56, 46, 51, 57, 32, 49, 46, 53, 52, 32, 49, 46, 50,
            54, 32, 54, 46, 53, 54, 32, 49, 46, 56, 53, 32, 56, 46, 49, 55, 46, 53, 57, 32, 49, 46,
            56, 32, 50, 46, 57, 56, 32, 53, 46, 52, 32, 53, 46, 53, 51, 32, 53, 46, 52, 104, 49,
            54, 46, 49, 52, 97, 51, 56, 46, 50, 55, 32, 51, 56, 46, 50, 55, 32, 48, 32, 48, 32, 49,
            32, 45, 51, 46, 53, 52, 32, 52, 46, 49, 108, 45, 54, 46, 53, 55, 45, 49, 46, 52, 49,
            99, 45, 49, 46, 53, 51, 45, 46, 51, 51, 45, 51, 46, 48, 52, 46, 54, 53, 45, 51, 46, 51,
            55, 32, 50, 46, 49, 56, 108, 45, 49, 46, 53, 54, 32, 55, 46, 50, 56, 97, 51, 56, 46,
            50, 55, 32, 51, 56, 46, 50, 55, 32, 48, 32, 48, 32, 49, 32, 45, 51, 49, 46, 57, 49, 45,
            46, 49, 53, 108, 45, 49, 46, 53, 54, 45, 55, 46, 50, 56, 99, 45, 46, 51, 51, 45, 49,
            46, 53, 51, 45, 49, 46, 56, 51, 45, 50, 46, 53, 49, 45, 51, 46, 51, 54, 45, 50, 46, 49,
            56, 108, 45, 54, 46, 52, 51, 32, 49, 46, 51, 56, 97, 51, 56, 46, 50, 55, 32, 51, 56,
            46, 50, 55, 32, 48, 32, 48, 32, 49, 32, 45, 51, 46, 51, 50, 45, 51, 46, 57, 50, 104,
            51, 49, 46, 50, 55, 99, 46, 51, 53, 32, 48, 32, 46, 53, 57, 45, 46, 48, 54, 46, 53, 57,
            45, 46, 51, 57, 118, 45, 49, 49, 46, 48, 54, 99, 48, 45, 46, 51, 50, 45, 46, 50, 52,
            45, 46, 51, 57, 45, 46, 53, 57, 45, 46, 51, 57, 104, 45, 57, 46, 49, 53, 122, 109, 45,
            49, 52, 46, 52, 51, 32, 50, 53, 46, 51, 51, 97, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32,
            48, 32, 48, 32, 49, 32, 51, 46, 48, 50, 32, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32, 51,
            46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 45, 54, 46, 50, 50, 32, 48, 32, 51, 46, 49, 49,
            32, 51, 46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 51, 46, 50, 45, 51, 46, 49, 49, 122,
            109, 52, 54, 46, 48, 53, 46, 49, 52, 97, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32, 48,
            32, 48, 32, 49, 32, 51, 46, 48, 50, 32, 51, 46, 49, 49, 32, 51, 46, 49, 49, 32, 51, 46,
            49, 49, 32, 48, 32, 48, 32, 49, 32, 45, 54, 46, 50, 50, 32, 48, 32, 51, 46, 49, 49, 32,
            51, 46, 49, 49, 32, 48, 32, 48, 32, 49, 32, 51, 46, 50, 45, 51, 46, 49, 49, 122, 34,
            47, 62, 60, 112, 97, 116, 104, 32, 100, 61, 34, 109, 49, 49, 53, 46, 54, 56, 32, 55,
            48, 46, 57, 53, 97, 52, 52, 46, 54, 51, 32, 52, 52, 46, 54, 51, 32, 48, 32, 48, 32, 49,
            32, 45, 52, 52, 46, 54, 51, 32, 52, 52, 46, 54, 51, 32, 52, 52, 46, 54, 51, 32, 52, 52,
            46, 54, 51, 32, 48, 32, 48, 32, 49, 32, 45, 52, 52, 46, 54, 51, 45, 52, 52, 46, 54, 51,
            32, 52, 52, 46, 54, 51, 32, 52, 52, 46, 54, 51, 32, 48, 32, 48, 32, 49, 32, 52, 52, 46,
            54, 51, 45, 52, 52, 46, 54, 51, 32, 52, 52, 46, 54, 51, 32, 52, 52, 46, 54, 51, 32, 48,
            32, 48, 32, 49, 32, 52, 52, 46, 54, 51, 32, 52, 52, 46, 54, 51, 122, 109, 45, 46, 56,
            52, 45, 52, 46, 51, 49, 32, 54, 46, 57, 54, 32, 52, 46, 51, 49, 45, 54, 46, 57, 54, 32,
            52, 46, 51, 49, 32, 53, 46, 57, 56, 32, 53, 46, 53, 57, 45, 55, 46, 54, 54, 32, 50, 46,
            56, 55, 32, 52, 46, 55, 56, 32, 54, 46, 54, 53, 45, 56, 46, 48, 57, 32, 49, 46, 51, 50,
            32, 51, 46, 52, 32, 55, 46, 52, 54, 45, 56, 46, 49, 57, 45, 46, 50, 57, 32, 49, 46, 56,
            56, 32, 55, 46, 57, 56, 45, 55, 46, 57, 56, 45, 49, 46, 56, 56, 46, 50, 57, 32, 56, 46,
            49, 57, 45, 55, 46, 52, 54, 45, 51, 46, 52, 45, 49, 46, 51, 50, 32, 56, 46, 48, 57, 45,
            54, 46, 54, 53, 45, 52, 46, 55, 56, 45, 50, 46, 56, 55, 32, 55, 46, 54, 54, 45, 53, 46,
            53, 57, 45, 53, 46, 57, 56, 45, 52, 46, 51, 49, 32, 54, 46, 57, 54, 45, 52, 46, 51, 49,
            45, 54, 46, 57, 54, 45, 53, 46, 53, 57, 32, 53, 46, 57, 56, 45, 50, 46, 56, 55, 45, 55,
            46, 54, 54, 45, 54, 46, 54, 53, 32, 52, 46, 55, 56, 45, 49, 46, 51, 50, 45, 56, 46, 48,
            57, 45, 55, 46, 52, 54, 32, 51, 46, 52, 46, 50, 57, 45, 56, 46, 49, 57, 45, 55, 46, 57,
            56, 32, 49, 46, 56, 56, 32, 49, 46, 56, 56, 45, 55, 46, 57, 56, 45, 56, 46, 49, 57, 46,
            50, 57, 32, 51, 46, 52, 45, 55, 46, 52, 54, 45, 56, 46, 48, 57, 45, 49, 46, 51, 50, 32,
            52, 46, 55, 56, 45, 54, 46, 54, 53, 45, 55, 46, 54, 54, 45, 50, 46, 56, 55, 32, 53, 46,
            57, 56, 45, 53, 46, 53, 57, 45, 54, 46, 57, 54, 45, 52, 46, 51, 49, 32, 54, 46, 57, 54,
            45, 52, 46, 51, 49, 45, 53, 46, 57, 56, 45, 53, 46, 53, 57, 32, 55, 46, 54, 54, 45, 50,
            46, 56, 55, 45, 52, 46, 55, 56, 45, 54, 46, 54, 53, 32, 56, 46, 48, 57, 45, 49, 46, 51,
            50, 45, 51, 46, 52, 45, 55, 46, 52, 54, 32, 56, 46, 49, 57, 46, 50, 57, 45, 49, 46, 56,
            56, 45, 55, 46, 57, 56, 32, 55, 46, 57, 56, 32, 49, 46, 56, 56, 45, 46, 50, 57, 45, 56,
            46, 49, 57, 32, 55, 46, 52, 54, 32, 51, 46, 52, 32, 49, 46, 51, 50, 45, 56, 46, 48, 57,
            32, 54, 46, 54, 53, 32, 52, 46, 55, 56, 32, 50, 46, 56, 55, 45, 55, 46, 54, 54, 32, 53,
            46, 53, 57, 32, 53, 46, 57, 56, 32, 52, 46, 51, 49, 45, 54, 46, 57, 54, 32, 52, 46, 51,
            49, 32, 54, 46, 57, 54, 32, 53, 46, 53, 57, 45, 53, 46, 57, 56, 32, 50, 46, 56, 55, 32,
            55, 46, 54, 54, 32, 54, 46, 54, 53, 45, 52, 46, 55, 56, 32, 49, 46, 51, 50, 32, 56, 46,
            48, 57, 32, 55, 46, 52, 54, 45, 51, 46, 52, 45, 46, 50, 57, 32, 56, 46, 49, 57, 32, 55,
            46, 57, 56, 45, 49, 46, 56, 56, 45, 49, 46, 56, 56, 32, 55, 46, 57, 56, 32, 56, 46, 49,
            57, 45, 46, 50, 57, 45, 51, 46, 52, 32, 55, 46, 52, 54, 32, 56, 46, 48, 57, 32, 49, 46,
            51, 50, 45, 52, 46, 55, 56, 32, 54, 46, 54, 53, 32, 55, 46, 54, 54, 32, 50, 46, 56, 55,
            122, 34, 32, 102, 105, 108, 108, 45, 114, 117, 108, 101, 61, 34, 101, 118, 101, 110,
            111, 100, 100, 34, 32, 115, 116, 114, 111, 107, 101, 61, 34, 35, 48, 48, 48, 34, 32,
            115, 116, 114, 111, 107, 101, 45, 108, 105, 110, 101, 99, 97, 112, 61, 34, 114, 111,
            117, 110, 100, 34, 32, 115, 116, 114, 111, 107, 101, 45, 108, 105, 110, 101, 106, 111,
            105, 110, 61, 34, 114, 111, 117, 110, 100, 34, 32, 115, 116, 114, 111, 107, 101, 45,
            119, 105, 100, 116, 104, 61, 34, 51, 34, 47, 62, 60, 47, 115, 118, 103, 62,
        ];
        let text_u8 = vec![97, 97, 97];

        let r = upload_bytes_with_content_type(file_u8, text_u8, "u8_data")
            .await
            .unwrap();
        println!("upload bytes with content type result: {}", r);
    }
}