A rust wrapper for the hydrus client api
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
trivernis ad30c14ddb
Add additional parameter to search requests
With the new client api 19 there's options to sort
results returned by search and filter by tag and file service.
The FileSearchOptions struct allows using those extra parameters.

Signed-off-by: trivernis <trivernis@protonmail.com>
3 years ago
.idea Add access management functions 3 years ago
src Add additional parameter to search requests 3 years ago
tests Add additional parameter to search requests 3 years ago
.gitignore Add access management functions 3 years ago
Cargo.toml Addd Tag and System Tag builder 3 years ago
LICENSE Create LICENSE 3 years ago
README.md Fix invalid example in readme 3 years ago

README.md

Hydrus Rust API

This is a WIP Rust Wrapper for the Hydrus Client API. The official API documentation can be found here.

Example with Wrapper

use std::env;
use hydrus_api::api_core::searching_and_fetching_files::FileSearchLocation;
use hydrus_api::wrapper::tag::Tag;
use hydrus_api::wrapper::service::ServiceName;
use hydrus_api::wrapper::hydrus_file::FileStatus;
use hydrus_api::wrapper::page::PageIdentifier;
use hydrus_api::wrapper::builders::tag_builder::{
    SystemTagBuilder, Comparator
};

#[tokio::main]
async fn main() {
    let hydrus_url = env::var("HYDRUS_URL").unwrap();
    let access_key = env::var("HYDRUS_ACCESS_KEY").unwrap();
    
    let hydrus = Hydrus::new(Client::new(hydrus_url, access_key));
    let files = hydrus.search(vec![
        Tag::from("character:megumin"),
        SystemTagBuilder::new().archive().build(),
        SystemTagBuilder::new().number_of_tags(Comparator::Greater, 12).build(),
    ]).await.unwrap();

    for mut file in files {
        file.add_tags(ServiceName::my_tags(), vec![Tag::from("ark mage")]).await.unwrap();
    }

    let url = hydrus.import()
        .url("https://www.pixiv.net/member_illust.php?illust_id=83406361&mode=medium")
        .page(PageIdentifier::name("My Import Page"))
        .add_additional_tag(ServiceName::my_tags(), Tag::from("character:megumin"))
        .show_page(true)
        .run().await.unwrap();
}

Example with Client

use hydrus_api::Client;
use hydrus_api::paths::adding_tags::{AddTagsRequestBuilder, TagAction};
use std::env;

#[tokio::main]
async fn main() {
    Client::new(
        env::var("HYDRUS_URL").unwrap(),
        env::var("HYDRUS_ACCESS_KEY").unwrap(),
    );
    // let's first import a file
    let hash = client.add_file("/path/to/my/file").await.unwrap().hash;
    
    // and now let's add tags to it
    let request = AddTagsRequestBuilder::default()
        .add_hash(hash)
        // for each tag the service has to be specified
        .add_tags("my tags", vec!["beach".into(), "summer".into()])
        // with tag actions tags can also be removed. It's especially useful for the PTR
        .add_tag_with_action("my tags", "rain", TagAction::DeleteFromLocalService)
        .build();
    
    client.add_tags(request).await.unwrap();
}

License

Apache-2.0