basex 0.7.0

A client library for BaseX XQuery databases.
Documentation
use basex;
use basex::{Client, ClientError, ToQueryArgument};
use std::io::Read;
use std::net::IpAddr;
use test_case::test_case;

#[test_case(IpAddr::V4("125.0.0.1".parse().unwrap()), "125.0.0.1", "xs:string")]
#[test_case("test", "test", "xs:string")]
#[test_case("test".to_owned(), "test", "xs:string")]
#[test_case(5u8, "5", "xs:unsignedByte")]
#[test_case(5u16, "5", "xs:unsignedShort")]
#[test_case(5u32, "5", "xs:unsignedInt")]
#[test_case(5u64, "5", "xs:unsignedLong")]
#[test_case(5i8, "5", "xs:byte")]
#[test_case(5i16, "5", "xs:short")]
#[test_case(5i32, "5", "xs:int")]
#[test_case(5i64, "5", "xs:long")]
#[test_case(true, "true", "xs:boolean")]
#[test_case(5.5f32, "5.5", "xs:float")]
#[test_case(5.5f64, "5.5", "xs:double")]
#[test_case(&5.2f64, "5.2", "xs:double")]
#[test_case(Some(true), "true", "xs:boolean")]
fn test_query_binds_variables<'a, T: 'a + ToQueryArgument<'a>>(
    value: T,
    expected_result: &str,
    expected_type: &str,
) -> Result<(), ClientError> {
    let mut client = Client::connect("localhost", 1984, "admin", "admin")?;

    let database_name = "525fd16";
    let info = client.create(database_name)?.without_input()?;

    assert!(info.starts_with(&format!("Database '{}' created", database_name)));

    let mut response = {
        let mut query = client
            .query(&mut format!("declare variable $prdel as {} external; $prdel", expected_type).as_bytes())?
            .without_info()?;
        query.bind("prdel")?.with_value(value)?;
        query.execute()?
    };
    let mut actual_result = String::new();
    response.read_to_string(&mut actual_result)?;
    response.close()?.close()?;

    assert_eq!(expected_result, actual_result);
    Ok(())
}