# pinata-sdk ![Rust](https://github.com/perfectmak/pinata-sdk/workflows/Rust/badge.svg) ![pinata-sdk](https://docs.rs/pinata-sdk/badge.svg) The `pinata_sdk` provides the easieset path for interacting with the [Pinata API](https://pinata.cloud/documentation#GettingStarted). ### Setup Add the crate as a dependency to your codebase ```toml [dependencies] pinata_sdk = "1.0.0" ``` ### Initializing the API ```rust use pinata_sdk::PinataApi; let api = PinataApi::new("api_key", "secret_api_key").unwrap(); // test that you can connect to the API: let result = api.test_authentication().await; if let Ok(_) = result { // credentials are correct and other api calls can be made } ``` ### Usage #### 1. Pinning a file Send a file to pinata for direct pinning to IPFS. ```rust use pinata_sdk::{ApiError, PinataApi, PinByFile}; let api = PinataApi::new("api_key", "secret_api_key").unwrap(); let result = api.pin_file(PinByFile::new("file_or_dir_path")).await; if let Ok(pinned_object) = result { let hash = pinned_object.ipfs_hash; } ``` If a directory path is used to construct `PinByFile`, then `pin_file()` will upload all the contents of the file to be pinned on pinata. #### 2. Pinning a JSON object You can send a JSON serializable to pinata for direct pinning to IPFS. ```rust use pinata_sdk::{ApiError, PinataApi, PinByJson}; use std::collections::HashMap; let api = PinataApi::new("api_key", "secret_api_key").unwrap(); // HashMap derives serde::Serialize let mut json_data = HashMap::new(); json_data.insert("name", "user"); let result = api.pin_json(PinByJson::new(json_data)).await; if let Ok(pinned_object) = result { let hash = pinned_object.ipfs_hash; } ``` #### 3. Unpinning You can unpin using the `PinataApi::unpin()` function by passing in the CID hash of the already pinned content. ## Contribution Guide Feel free to contribute. Please ensure that an issue is exists that describes the feature or bugfix you are planning to contribute. ## License MIT OR Apache-2.0