Compare commits
	
		
			4 Commits
		
	
	
		
			main-rfs-c
			...
			developmen
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 0e63efda61 | ||
|  | 568a5b0a49 | ||
|  | d431705501 | ||
|  | b4e370b668 | 
| @@ -11,18 +11,17 @@ categories = ["os", "filesystem", "api-bindings"] | ||||
| readme = "README.md" | ||||
|  | ||||
| [workspace] | ||||
| members = [".", "vault", "git", "redisclient", "mycelium", "text", "os", "net", "zinit_client", "process", "virt", "postgresclient", "rhai", "herodo", "rfs-client"] | ||||
| members = [".", "vault", "git", "redisclient", "mycelium", "text", "os", "net", "zinit_client", "process", "virt", "postgresclient", "rhai", "herodo"] | ||||
| resolver = "2" | ||||
|  | ||||
| [workspace.metadata] | ||||
| # Workspace-level metadata | ||||
| rust-version = "1.85.0" | ||||
| rust-version = "1.70.0" | ||||
|  | ||||
| [workspace.dependencies] | ||||
| # Core shared dependencies with consistent versions | ||||
| anyhow = "1.0.98" | ||||
| base64 = "0.22.1" | ||||
| bytes = "1.4.0" | ||||
| dirs = "6.0.0" | ||||
| env_logger = "0.11.8" | ||||
| futures = "0.3.30" | ||||
| @@ -85,4 +84,3 @@ sal-virt = { path = "virt" } | ||||
| sal-postgresclient = { path = "postgresclient" } | ||||
| sal-vault = { path = "vault" } | ||||
| sal-rhai = { path = "rhai" } | ||||
| sal-rfs-client = { path = "rfs-client" } | ||||
|   | ||||
							
								
								
									
										2
									
								
								rfs-client/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								rfs-client/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +0,0 @@ | ||||
| /target/ | ||||
| **/*.rs.bk | ||||
| @@ -1,26 +0,0 @@ | ||||
| [package] | ||||
| name = "sal-rfs-client" | ||||
| version = "0.1.0" | ||||
| edition = "2021" | ||||
| description = "SAL RFS Client - Client library for Remote File System server" | ||||
| repository = "https://git.threefold.info/herocode/sal" | ||||
| license = "Apache-2.0" | ||||
| keywords = ["rfs", "client", "filesystem", "remote"] | ||||
| categories = ["filesystem", "api-bindings"] | ||||
|  | ||||
| [dependencies] | ||||
| openapi = { path = "./openapi" } | ||||
| thiserror.workspace = true | ||||
| url.workspace = true | ||||
| reqwest = { workspace = true, features = ["json", "multipart"] } | ||||
| tokio = { workspace = true, features = ["full"] } | ||||
| serde = { workspace = true, features = ["derive"] } | ||||
| serde_json.workspace = true | ||||
| log.workspace = true | ||||
| bytes.workspace = true | ||||
| futures.workspace = true | ||||
| rhai.workspace = true | ||||
| lazy_static.workspace = true | ||||
|  | ||||
| [dev-dependencies] | ||||
| tempfile = "3.0" | ||||
| @@ -1,195 +0,0 @@ | ||||
| # RFS Client | ||||
|  | ||||
| A Rust client library for interacting with the Remote File System (RFS) server. | ||||
|  | ||||
| ## Overview | ||||
|  | ||||
| This client library provides a user-friendly wrapper around the OpenAPI-generated client code. It offers high-level abstractions for common operations such as: | ||||
|  | ||||
| - Authentication and session management | ||||
| - File uploads and downloads with progress tracking | ||||
| - Block-level operations and verification | ||||
| - FList creation, monitoring, and management | ||||
| - Timeout configuration and error handling | ||||
|  | ||||
| ## Structure | ||||
|  | ||||
| The library is organized as follows: | ||||
|  | ||||
| - `client.rs`: Main client implementation with methods for interacting with the RFS server | ||||
| - `error.rs`: Error types and handling | ||||
| - `types.rs`: Type definitions and utilities | ||||
|  | ||||
| ## Quick Start | ||||
|  | ||||
| ```rust | ||||
| use rfs_client::RfsClient; | ||||
| use rfs_client::types::{ClientConfig, Credentials}; | ||||
|  | ||||
| #[tokio::main] | ||||
| async fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // Create a client with custom configuration | ||||
|     let config = ClientConfig { | ||||
|         base_url: "http://localhost:8080".to_string(), | ||||
|         credentials: Some(Credentials { | ||||
|             username: "user".to_string(), | ||||
|             password: "password".to_string(), | ||||
|         }), | ||||
|         timeout_seconds: 60, | ||||
|     }; | ||||
|      | ||||
|     let mut client = RfsClient::new(config); | ||||
|      | ||||
|     // Authenticate | ||||
|     client.authenticate().await?; | ||||
|     println!("Authentication successful"); | ||||
|      | ||||
|     // Upload a file | ||||
|     let file_path = "/path/to/file.txt"; | ||||
|     let file_hash = client.upload_file(file_path, None).await?; | ||||
|     println!("File uploaded with hash: {}", file_hash); | ||||
|      | ||||
|     // Download the file | ||||
|     let output_path = "/path/to/output.txt"; | ||||
|     client.download_file(&file_hash, output_path, None).await?; | ||||
|     println!("File downloaded to {}", output_path); | ||||
|      | ||||
|     Ok(()) | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## Feature Examples | ||||
|  | ||||
| ### Authentication | ||||
|  | ||||
| ```rust | ||||
| // Create a client with authentication | ||||
| let config = ClientConfig { | ||||
|     base_url: "http://localhost:8080".to_string(), | ||||
|     credentials: Some(Credentials { | ||||
|         username: "user".to_string(), | ||||
|         password: "password".to_string(), | ||||
|     }), | ||||
|     timeout_seconds: 30, | ||||
| }; | ||||
|  | ||||
| let mut client = RfsClient::new(config); | ||||
|  | ||||
| // Authenticate with the server | ||||
| client.authenticate().await?; | ||||
| if client.is_authenticated() { | ||||
|     println!("Authentication successful"); | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ### File Management | ||||
|  | ||||
| ```rust | ||||
| // Upload a file with options | ||||
| let upload_options = UploadOptions { | ||||
|     chunk_size: Some(1024 * 1024), // 1MB chunks | ||||
|     verify: true, | ||||
| }; | ||||
|  | ||||
| let file_hash = client.upload_file("/path/to/file.txt", Some(upload_options)).await?; | ||||
|  | ||||
| // Download the file | ||||
| let download_options = DownloadOptions { | ||||
|     verify: true, | ||||
| }; | ||||
|  | ||||
| client.download_file(&file_hash, "/path/to/output.txt", Some(download_options)).await?; | ||||
| ``` | ||||
|  | ||||
| ### FList Operations | ||||
|  | ||||
| ```rust | ||||
| // Create an FList from a Docker image | ||||
| let options = FlistOptions { | ||||
|     auth: None, | ||||
|     username: None, | ||||
|     password: None, | ||||
|     email: None, | ||||
|     server_address: Some("docker.io".to_string()), | ||||
|     identity_token: None, | ||||
|     registry_token: None, | ||||
| }; | ||||
|  | ||||
| let job_id = client.create_flist("alpine:latest", Some(options)).await?; | ||||
|  | ||||
| // Wait for FList creation with progress tracking | ||||
| let wait_options = WaitOptions { | ||||
|     timeout_seconds: 60, | ||||
|     poll_interval_ms: 1000, | ||||
|     progress_callback: Some(Box::new(|state| { | ||||
|         println!("Progress: FList state is now {:?}", state); | ||||
|     })), | ||||
| }; | ||||
|  | ||||
| let final_state = client.wait_for_flist_creation(&job_id, Some(wait_options)).await?; | ||||
|  | ||||
| // List available FLists | ||||
| let flists = client.list_flists().await?; | ||||
|  | ||||
| // Preview an FList | ||||
| let preview = client.preview_flist("flists/user/alpine-latest.fl").await?; | ||||
|  | ||||
| // Download an FList | ||||
| client.download_flist("flists/user/alpine-latest.fl", "/tmp/downloaded_flist.fl").await?; | ||||
| ``` | ||||
|  | ||||
| ### Block Management | ||||
|  | ||||
| ```rust | ||||
| // List blocks | ||||
| let blocks_list = client.list_blocks(None).await?; | ||||
|  | ||||
| // Check if a block exists | ||||
| let exists = client.check_block("block_hash").await?; | ||||
|  | ||||
| // Get block content | ||||
| let block_content = client.get_block("block_hash").await?; | ||||
|  | ||||
| // Upload a block | ||||
| let block_hash = client.upload_block("file_hash", 0, data).await?; | ||||
|  | ||||
| // Verify blocks | ||||
| let request = VerifyBlocksRequest { blocks: verify_blocks }; | ||||
| let verify_result = client.verify_blocks(request).await?; | ||||
| ``` | ||||
|  | ||||
| ## Complete Examples | ||||
|  | ||||
| For more detailed examples, check the `examples` directory: | ||||
|  | ||||
| - `authentication.rs`: Authentication and health check examples | ||||
| - `file_management.rs`: File upload and download with verification | ||||
| - `flist_operations.rs`: Complete FList creation, monitoring, listing, preview, and download | ||||
| - `block_management.rs`: Block-level operations including listing, verification, and upload | ||||
| - `wait_for_flist.rs`: Advanced FList creation with progress monitoring | ||||
|  | ||||
| Run an example with: | ||||
|  | ||||
| ```bash | ||||
| cargo run --example flist_operations | ||||
| ``` | ||||
|  | ||||
| ## Development | ||||
|  | ||||
| This library wraps the OpenAPI-generated client located in the `openapi` directory. The OpenAPI client was generated using the OpenAPI Generator CLI. | ||||
|  | ||||
| To build the library: | ||||
|  | ||||
| ```bash | ||||
| cargo build | ||||
| ``` | ||||
|  | ||||
| To run tests: | ||||
|  | ||||
| ```bash | ||||
| cargo test | ||||
| ``` | ||||
|  | ||||
| ## License | ||||
|  | ||||
| MIT | ||||
| @@ -1,42 +0,0 @@ | ||||
| use sal_rfs_client::RfsClient; | ||||
| use sal_rfs_client::types::{ClientConfig, Credentials}; | ||||
|  | ||||
| #[tokio::main] | ||||
| async fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // Create a client with authentication credentials | ||||
|     let config = ClientConfig { | ||||
|         base_url: "http://localhost:8080".to_string(), | ||||
|         credentials: Some(Credentials { | ||||
|             username: "user".to_string(), | ||||
|             password: "password".to_string(), | ||||
|         }), | ||||
|         timeout_seconds: 30, | ||||
|     }; | ||||
|      | ||||
|     let mut client = RfsClient::new(config); | ||||
|     println!("Client created with authentication credentials"); | ||||
|      | ||||
|     // Authenticate with the server | ||||
|     client.authenticate().await?; | ||||
|     if client.is_authenticated() { | ||||
|         println!("Authentication successful"); | ||||
|     } else { | ||||
|         println!("Authentication failed"); | ||||
|     } | ||||
|  | ||||
|     // Create a client without authentication | ||||
|     let config_no_auth = ClientConfig { | ||||
|         base_url: "http://localhost:8080".to_string(), | ||||
|         credentials: None, | ||||
|         timeout_seconds: 30, | ||||
|     }; | ||||
|      | ||||
|     let client_no_auth = RfsClient::new(config_no_auth); | ||||
|     println!("Client created without authentication credentials"); | ||||
|      | ||||
|     // Check health endpoint (doesn't require authentication) | ||||
|     let health = client_no_auth.health_check().await?; | ||||
|     println!("Server health: {:?}", health); | ||||
|      | ||||
|     Ok(()) | ||||
| } | ||||
| @@ -1,128 +0,0 @@ | ||||
| use sal_rfs_client::RfsClient; | ||||
| use sal_rfs_client::types::{ClientConfig, Credentials}; | ||||
| use openapi::models::{VerifyBlock, VerifyBlocksRequest}; | ||||
|  | ||||
| #[tokio::main] | ||||
| async fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // Create a client with authentication | ||||
|     let config = ClientConfig { | ||||
|         base_url: "http://localhost:8080".to_string(), | ||||
|         credentials: Some(Credentials { | ||||
|             username: "user".to_string(), | ||||
|             password: "password".to_string(), | ||||
|         }), | ||||
|         timeout_seconds: 60, | ||||
|     }; | ||||
|      | ||||
|     let mut client = RfsClient::new(config); | ||||
|      | ||||
|     // Authenticate with the server | ||||
|     client.authenticate().await?; | ||||
|     println!("Authentication successful"); | ||||
|      | ||||
|     // Create a test file to upload for block testing | ||||
|     let test_file_path = "/tmp/block_test.txt"; | ||||
|     let test_content = "This is a test file for RFS client block management"; | ||||
|     std::fs::write(test_file_path, test_content)?; | ||||
|     println!("Created test file at {}", test_file_path); | ||||
|      | ||||
|     // Upload the file to get blocks | ||||
|     println!("Uploading file to get blocks..."); | ||||
|     let file_hash = client.upload_file(test_file_path, None).await?; | ||||
|     println!("File uploaded with hash: {}", file_hash); | ||||
|      | ||||
|     // Get blocks by file hash | ||||
|     println!("Getting blocks for file hash: {}", file_hash); | ||||
|     let blocks = client.get_blocks_by_hash(&file_hash).await?; | ||||
|     println!("Found {} blocks for the file", blocks.blocks.len()); | ||||
|      | ||||
|     // Print block information | ||||
|     for (i, block_data) in blocks.blocks.iter().enumerate() { | ||||
|         println!("Block {}: Hash={}, Index={}", i, block_data.hash, block_data.index); | ||||
|     } | ||||
|      | ||||
|     // Verify blocks with complete information | ||||
|     println!("Verifying blocks..."); | ||||
|      | ||||
|     // Create a list of VerifyBlock objects with complete information | ||||
|     let verify_blocks = blocks.blocks.iter().map(|block| { | ||||
|         VerifyBlock { | ||||
|             block_hash: block.hash.clone(), | ||||
|             block_index: block.index, | ||||
|             file_hash: file_hash.clone(), // Using the actual file hash | ||||
|         } | ||||
|     }).collect::<Vec<_>>(); | ||||
|  | ||||
|     // Create the request with the complete block information | ||||
|     for block in verify_blocks.iter() { | ||||
|         println!("Block: {}", block.block_hash); | ||||
|         println!("Block index: {}", block.block_index); | ||||
|         println!("File hash: {}", block.file_hash); | ||||
|     } | ||||
|     let request = VerifyBlocksRequest { blocks: verify_blocks }; | ||||
|      | ||||
|     // Send the verification request | ||||
|     let verify_result = client.verify_blocks(request).await?; | ||||
|     println!("Verification result: {} missing blocks", verify_result.missing.len()); | ||||
|     for block in verify_result.missing.iter() { | ||||
|         println!("Missing block: {}", block); | ||||
|     } | ||||
|      | ||||
|     // List blocks (list_blocks_handler) | ||||
|     println!("\n1. Listing all blocks with pagination..."); | ||||
|     let blocks_list = client.list_blocks(None).await?; | ||||
|     println!("Server has {} blocks in total", blocks_list.len()); | ||||
|     if !blocks_list.is_empty() { | ||||
|         let first_few = blocks_list.iter().take(3) | ||||
|             .map(|s| s.as_str()) | ||||
|             .collect::<Vec<_>>() | ||||
|             .join(", "); | ||||
|         println!("First few blocks: {}", first_few); | ||||
|     } | ||||
|      | ||||
|     // Check if a block exists (check_block_handler) | ||||
|     if !blocks.blocks.is_empty() { | ||||
|         let block_to_check = &blocks.blocks[0].hash; | ||||
|         println!("\n2. Checking if block exists: {}", block_to_check); | ||||
|         let exists = client.check_block(block_to_check).await?; | ||||
|         println!("Block exists: {}", exists); | ||||
|     } | ||||
|      | ||||
|     // Get block downloads statistics (get_block_downloads_handler) | ||||
|     if !blocks.blocks.is_empty() { | ||||
|         let block_to_check = &blocks.blocks[0].hash; | ||||
|         println!("\n3. Getting download statistics for block: {}", block_to_check); | ||||
|         let downloads = client.get_block_downloads(block_to_check).await?; | ||||
|         println!("Block has been downloaded {} times", downloads.downloads_count); | ||||
|     } | ||||
|      | ||||
|     // Get a specific block content (get_block_handler) | ||||
|     if !blocks.blocks.is_empty() { | ||||
|         let block_to_get = &blocks.blocks[0].hash; | ||||
|         println!("\n4. Getting content for block: {}", block_to_get); | ||||
|         let block_content = client.get_block(block_to_get).await?; | ||||
|         println!("Retrieved block with {} bytes", block_content.len()); | ||||
|     } | ||||
|      | ||||
|     // Get user blocks (get_user_blocks_handler) | ||||
|     println!("\n6. Listing user blocks..."); | ||||
|     let user_blocks = client.get_user_blocks(Some(1), Some(10)).await?; | ||||
|     println!("User has {} blocks (showing page 1 with 10 per page)", user_blocks.total); | ||||
|     for block in user_blocks.blocks.iter().take(3) { | ||||
|         println!("  - Block: {}, Size: {}", block.hash, block.size); | ||||
|     } | ||||
|      | ||||
|     // Upload a block (upload_block_handler) | ||||
|     println!("\n7. Uploading a new test block..."); | ||||
|     let test_block_data = b"This is test block data for direct block upload"; | ||||
|     let new_file_hash = "test_file_hash_for_block_upload"; | ||||
|     let block_index = 0; | ||||
|     let block_hash = client.upload_block(new_file_hash, block_index, test_block_data.to_vec()).await?; | ||||
|     println!("Uploaded block with hash: {}", block_hash); | ||||
|      | ||||
|     // Clean up | ||||
|     std::fs::remove_file(test_file_path)?; | ||||
|     println!("Test file cleaned up"); | ||||
|      | ||||
|     Ok(()) | ||||
| } | ||||
| @@ -1,64 +0,0 @@ | ||||
| use sal_rfs_client::RfsClient; | ||||
| use sal_rfs_client::types::{ClientConfig, Credentials, UploadOptions, DownloadOptions}; | ||||
|  | ||||
| #[tokio::main] | ||||
| async fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // Create a client with authentication | ||||
|     let config = ClientConfig { | ||||
|         base_url: "http://localhost:8080".to_string(), | ||||
|         credentials: Some(Credentials { | ||||
|             username: "user".to_string(), | ||||
|             password: "password".to_string(), | ||||
|         }), | ||||
|         timeout_seconds: 60, | ||||
|     }; | ||||
|      | ||||
|     let mut client = RfsClient::new(config); | ||||
|      | ||||
|     // Authenticate with the server | ||||
|     client.authenticate().await?; | ||||
|     println!("Authentication successful"); | ||||
|      | ||||
|     // Create a test file to upload | ||||
|     let test_file_path = "/tmp/test_upload.txt"; | ||||
|     std::fs::write(test_file_path, "This is a test file for RFS client upload")?; | ||||
|     println!("Created test file at {}", test_file_path); | ||||
|      | ||||
|     // Upload the file with options | ||||
|     println!("Uploading file..."); | ||||
|     let upload_options = UploadOptions { | ||||
|         chunk_size: Some(1024 * 1024), // 1MB chunks | ||||
|         verify: true, | ||||
|     }; | ||||
|      | ||||
|     let file_hash = client.upload_file(test_file_path, Some(upload_options)).await?; | ||||
|     println!("File uploaded with hash: {}", file_hash); | ||||
|      | ||||
|     // Download the file | ||||
|     let download_path = "/tmp/test_download.txt"; | ||||
|     println!("Downloading file to {}...", download_path); | ||||
|      | ||||
|     let download_options = DownloadOptions { | ||||
|         verify: true, | ||||
|     }; | ||||
|      | ||||
|     client.download_file(&file_hash, download_path, Some(download_options)).await?; | ||||
|     println!("File downloaded to {}", download_path); | ||||
|      | ||||
|     // Verify the downloaded file matches the original | ||||
|     let original_content = std::fs::read_to_string(test_file_path)?; | ||||
|     let downloaded_content = std::fs::read_to_string(download_path)?; | ||||
|      | ||||
|     if original_content == downloaded_content { | ||||
|         println!("File contents match! Download successful."); | ||||
|     } else { | ||||
|         println!("ERROR: File contents do not match!"); | ||||
|     } | ||||
|      | ||||
|     // Clean up test files | ||||
|     std::fs::remove_file(test_file_path)?; | ||||
|     std::fs::remove_file(download_path)?; | ||||
|     println!("Test files cleaned up"); | ||||
|      | ||||
|     Ok(()) | ||||
| } | ||||
| @@ -1,170 +0,0 @@ | ||||
| use sal_rfs_client::RfsClient; | ||||
| use sal_rfs_client::types::{ClientConfig, Credentials, FlistOptions, WaitOptions}; | ||||
|  | ||||
| #[tokio::main] | ||||
| async fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     let parent_dir = "flists"; | ||||
|     // Create a client with authentication | ||||
|     let config = ClientConfig { | ||||
|         base_url: "http://localhost:8080".to_string(), | ||||
|         credentials: Some(Credentials { | ||||
|             username: "user".to_string(), | ||||
|             password: "password".to_string(), | ||||
|         }), | ||||
|         timeout_seconds: 60, | ||||
|     }; | ||||
|      | ||||
|     let mut client = RfsClient::new(config); | ||||
|      | ||||
|     // Authenticate with the server | ||||
|     client.authenticate().await?; | ||||
|     println!("Authentication successful"); | ||||
|      | ||||
|     println!("\n1. CREATE FLIST - Creating an FList from a Docker image"); | ||||
|     let image_name = "alpine:latest"; | ||||
|     println!("Creating FList for image: {}", image_name); | ||||
|      | ||||
|     // Use FlistOptions to specify additional parameters | ||||
|     let options = FlistOptions { | ||||
|         auth: None, | ||||
|         username: None, | ||||
|         password: None, | ||||
|         email: None, | ||||
|         server_address: Some("docker.io".to_string()), | ||||
|         identity_token: None, | ||||
|         registry_token: None, | ||||
|     }; | ||||
|      | ||||
|     // Create the FList and handle potential conflict error | ||||
|     let job_id = match client.create_flist(&image_name, Some(options)).await { | ||||
|         Ok(id) => { | ||||
|             println!("FList creation started with job ID: {}", id); | ||||
|             Some(id) | ||||
|         }, | ||||
|         Err(e) => { | ||||
|             if e.to_string().contains("Conflict") { | ||||
|                 println!("FList already exists"); | ||||
|                 None | ||||
|             } else { | ||||
|                 return Err(e.into()); | ||||
|             } | ||||
|         } | ||||
|     }; | ||||
|      | ||||
|     // 2. Check FList state if we have a job ID | ||||
|     if let Some(job_id) = &job_id { | ||||
|         println!("\n2. GET FLIST STATE - Checking FList creation state"); | ||||
|         let state = client.get_flist_state(job_id).await?; | ||||
|         println!("Current FList state: {:?}", state.flist_state); | ||||
|          | ||||
|         // 3. Wait for FList creation with progress reporting | ||||
|         println!("\n3. WAIT FOR FLIST CREATION - Waiting for FList to be created with progress reporting"); | ||||
|         let wait_options = WaitOptions { | ||||
|             timeout_seconds: 60,  // Shorter timeout for the example | ||||
|             poll_interval_ms: 1000, | ||||
|             progress_callback: Some(Box::new(|state| { | ||||
|                 println!("Progress: FList state is now {:?}", state); | ||||
|                 // No return value needed (returns unit type) | ||||
|             })), | ||||
|         }; | ||||
|          | ||||
|         // Wait for the FList to be created (with a timeout) | ||||
|         match client.wait_for_flist_creation(job_id, Some(wait_options)).await { | ||||
|             Ok(final_state) => { | ||||
|                 println!("FList creation completed with state: {:?}", final_state); | ||||
|             }, | ||||
|             Err(e) => { | ||||
|                 println!("Error waiting for FList creation: {}", e); | ||||
|                 // Continue with the example even if waiting fails | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
|      | ||||
|     // 4. List all available FLists | ||||
|     println!("\n4. LIST FLISTS - Listing all available FLists"); | ||||
|      | ||||
|     // Variable to store the FList path for preview and download | ||||
|     let mut flist_path_for_preview: Option<String> = None; | ||||
|      | ||||
|     match client.list_flists().await { | ||||
|         Ok(flists) => { | ||||
|             println!("Found {} FList categories", flists.len()); | ||||
|              | ||||
|             for (category, files) in &flists { | ||||
|                 println!("Category: {}", category); | ||||
|                 for file in files.iter().take(2) { // Show only first 2 files per category | ||||
|                     println!("  - {} (size: {} bytes)", file.name, file.size); | ||||
|                      | ||||
|                     // Save the first FList path for preview | ||||
|                     if flist_path_for_preview.is_none() { | ||||
|                         let path = format!("{}/{}/{}", parent_dir, category, file.name); | ||||
|                         flist_path_for_preview = Some(path); | ||||
|                     } | ||||
|                 } | ||||
|                 if files.len() > 2 { | ||||
|                     println!("  - ... and {} more files", files.len() - 2); | ||||
|                 } | ||||
|             } | ||||
|              | ||||
|             // 5. Preview an FList if we found one | ||||
|             if let Some(ref flist_path) = flist_path_for_preview { | ||||
|                 println!("\n5. PREVIEW FLIST - Previewing FList: {}", flist_path); | ||||
|                 match client.preview_flist(flist_path).await { | ||||
|                     Ok(preview) => { | ||||
|                         println!("FList preview for {}:", flist_path); | ||||
|                         println!("  - Checksum: {}", preview.checksum); | ||||
|                         println!("  - Metadata: {}", preview.metadata); | ||||
|                          | ||||
|                         // Display content (list of strings) | ||||
|                         if !preview.content.is_empty() { | ||||
|                             println!("  - Content entries:"); | ||||
|                             for (i, entry) in preview.content.iter().enumerate().take(5) { | ||||
|                                 println!("    {}. {}", i+1, entry); | ||||
|                             } | ||||
|                             if preview.content.len() > 5 { | ||||
|                                 println!("    ... and {} more entries", preview.content.len() - 5); | ||||
|                             } | ||||
|                         } | ||||
|                     }, | ||||
|                     Err(e) => println!("Error previewing FList: {}", e), | ||||
|                 } | ||||
|             } else { | ||||
|                 println!("No FLists available for preview"); | ||||
|             } | ||||
|         }, | ||||
|         Err(e) => println!("Error listing FLists: {}", e), | ||||
|     } | ||||
|      | ||||
|     // 6. DOWNLOAD FLIST - Downloading an FList to a local file | ||||
|     if let Some(ref flist_path) = flist_path_for_preview { | ||||
|         println!("\n6. DOWNLOAD FLIST - Downloading FList: {}", flist_path); | ||||
|          | ||||
|         // Create a temporary output path for the downloaded FList | ||||
|         let output_path = "/tmp/downloaded_flist.fl"; | ||||
|          | ||||
|         match client.download_flist(flist_path, output_path).await { | ||||
|             Ok(_) => { | ||||
|                 println!("FList successfully downloaded to {}", output_path); | ||||
|                  | ||||
|                 // Get file size | ||||
|                 match std::fs::metadata(output_path) { | ||||
|                     Ok(metadata) => println!("Downloaded file size: {} bytes", metadata.len()), | ||||
|                     Err(e) => println!("Error getting file metadata: {}", e), | ||||
|                 } | ||||
|             }, | ||||
|             Err(e) => println!("Error downloading FList: {}", e), | ||||
|         } | ||||
|     } else { | ||||
|         println!("\n6. DOWNLOAD FLIST - No FList available for download"); | ||||
|     } | ||||
|      | ||||
|     println!("\nAll FList operations demonstrated:"); | ||||
|     println!("1. create_flist - Create a new FList from a Docker image"); | ||||
|     println!("2. get_flist_state - Check the state of an FList creation job"); | ||||
|     println!("3. wait_for_flist_creation - Wait for an FList to be created with progress reporting"); | ||||
|     println!("4. list_flists - List all available FLists"); | ||||
|     println!("5. preview_flist - Preview the content of an FList"); | ||||
|     println!("6. download_flist - Download an FList to a local file"); | ||||
|      | ||||
|     Ok(()) | ||||
| } | ||||
| @@ -1,61 +0,0 @@ | ||||
| use sal_rfs_client::RfsClient; | ||||
| use sal_rfs_client::types::{ClientConfig, Credentials, WaitOptions}; | ||||
| use openapi::models::FlistState; | ||||
|  | ||||
| #[tokio::main] | ||||
| async fn main() -> Result<(), Box<dyn std::error::Error>> { | ||||
|     // Create a client with authentication | ||||
|     let config = ClientConfig { | ||||
|         base_url: "http://localhost:8080".to_string(), | ||||
|         credentials: Some(Credentials { | ||||
|             username: "user".to_string(), | ||||
|             password: "password".to_string(), | ||||
|         }), | ||||
|         timeout_seconds: 60, | ||||
|     }; | ||||
|      | ||||
|     let mut client = RfsClient::new(config); | ||||
|      | ||||
|     // Authenticate with the server | ||||
|     client.authenticate().await?; | ||||
|     println!("Authentication successful"); | ||||
|      | ||||
|     // Create an FList from a Docker image | ||||
|     let image_name = "redis:latest"; | ||||
|     println!("Creating FList for image: {}", image_name); | ||||
|      | ||||
|     let job_id = client.create_flist(&image_name, None).await?; | ||||
|     println!("FList creation started with job ID: {}", job_id); | ||||
|      | ||||
|     // Set up options for waiting with progress reporting | ||||
|     let options = WaitOptions { | ||||
|         timeout_seconds: 600,  // 10 minutes timeout | ||||
|         poll_interval_ms: 2000, // Check every 2 seconds | ||||
|         progress_callback: Some(Box::new(|state| { | ||||
|             match state { | ||||
|                 FlistState::FlistStateInProgress(info) => { | ||||
|                     println!("Progress: {:.1}% - {}", info.in_progress.progress, info.in_progress.msg); | ||||
|                 }, | ||||
|                 FlistState::FlistStateStarted(_) => { | ||||
|                     println!("FList creation started..."); | ||||
|                 }, | ||||
|                 FlistState::FlistStateAccepted(_) => { | ||||
|                     println!("FList creation request accepted..."); | ||||
|                 }, | ||||
|                 _ => println!("State: {:?}", state), | ||||
|             } | ||||
|         })), | ||||
|     }; | ||||
|      | ||||
|     // Wait for the FList to be created | ||||
|     println!("Waiting for FList creation to complete..."); | ||||
|      | ||||
|     // Use ? operator to propagate errors properly | ||||
|     let state = client.wait_for_flist_creation(&job_id, Some(options)).await | ||||
|         .map_err(|e| -> Box<dyn std::error::Error> { Box::new(e) })?; | ||||
|      | ||||
|     println!("FList created successfully!"); | ||||
|     println!("Final state: {:?}", state); | ||||
|      | ||||
|     Ok(()) | ||||
| } | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										3
									
								
								rfs-client/openapi/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								rfs-client/openapi/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +0,0 @@ | ||||
| /target/ | ||||
| **/*.rs.bk | ||||
| Cargo.lock | ||||
| @@ -1,23 +0,0 @@ | ||||
| # OpenAPI Generator Ignore | ||||
| # Generated by openapi-generator https://github.com/openapitools/openapi-generator | ||||
|  | ||||
| # Use this file to prevent files from being overwritten by the generator. | ||||
| # The patterns follow closely to .gitignore or .dockerignore. | ||||
|  | ||||
| # As an example, the C# client generator defines ApiClient.cs. | ||||
| # You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: | ||||
| #ApiClient.cs | ||||
|  | ||||
| # You can match any string of characters against a directory, file or extension with a single asterisk (*): | ||||
| #foo/*/qux | ||||
| # The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux | ||||
|  | ||||
| # You can recursively match patterns against a directory, file or extension with a double asterisk (**): | ||||
| #foo/**/qux | ||||
| # This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux | ||||
|  | ||||
| # You can also negate patterns with an exclamation (!). | ||||
| # For example, you can ignore all files in a docs folder with the file extension .md: | ||||
| #docs/*.md | ||||
| # Then explicitly reverse the ignore rule for a single file: | ||||
| #!docs/README.md | ||||
| @@ -1,125 +0,0 @@ | ||||
| .gitignore | ||||
| .travis.yml | ||||
| Cargo.toml | ||||
| README.md | ||||
| docs/AuthenticationApi.md | ||||
| docs/BlockDownloadsResponse.md | ||||
| docs/BlockInfo.md | ||||
| docs/BlockManagementApi.md | ||||
| docs/BlockUploadedResponse.md | ||||
| docs/BlocksResponse.md | ||||
| docs/DirListTemplate.md | ||||
| docs/DirLister.md | ||||
| docs/ErrorTemplate.md | ||||
| docs/FileDownloadRequest.md | ||||
| docs/FileInfo.md | ||||
| docs/FileManagementApi.md | ||||
| docs/FileUploadResponse.md | ||||
| docs/FlistBody.md | ||||
| docs/FlistManagementApi.md | ||||
| docs/FlistState.md | ||||
| docs/FlistStateAccepted.md | ||||
| docs/FlistStateCreated.md | ||||
| docs/FlistStateInProgress.md | ||||
| docs/FlistStateInfo.md | ||||
| docs/FlistStateResponse.md | ||||
| docs/FlistStateStarted.md | ||||
| docs/HealthResponse.md | ||||
| docs/Job.md | ||||
| docs/ListBlocksParams.md | ||||
| docs/ListBlocksResponse.md | ||||
| docs/PreviewResponse.md | ||||
| docs/ResponseError.md | ||||
| docs/ResponseErrorBadRequest.md | ||||
| docs/ResponseErrorConflict.md | ||||
| docs/ResponseErrorForbidden.md | ||||
| docs/ResponseErrorNotFound.md | ||||
| docs/ResponseErrorTemplateError.md | ||||
| docs/ResponseErrorUnauthorized.md | ||||
| docs/ResponseResult.md | ||||
| docs/ResponseResultBlockUploaded.md | ||||
| docs/ResponseResultDirTemplate.md | ||||
| docs/ResponseResultFileUploaded.md | ||||
| docs/ResponseResultFlistCreated.md | ||||
| docs/ResponseResultFlistState.md | ||||
| docs/ResponseResultFlists.md | ||||
| docs/ResponseResultPreviewFlist.md | ||||
| docs/ResponseResultRes.md | ||||
| docs/ResponseResultSignedIn.md | ||||
| docs/SignInBody.md | ||||
| docs/SignInResponse.md | ||||
| docs/SystemApi.md | ||||
| docs/TemplateErr.md | ||||
| docs/TemplateErrBadRequest.md | ||||
| docs/TemplateErrInternalServerError.md | ||||
| docs/TemplateErrNotFound.md | ||||
| docs/UploadBlockParams.md | ||||
| docs/UserBlockInfo.md | ||||
| docs/UserBlocksResponse.md | ||||
| docs/VerifyBlock.md | ||||
| docs/VerifyBlocksRequest.md | ||||
| docs/VerifyBlocksResponse.md | ||||
| docs/WebsiteServingApi.md | ||||
| git_push.sh | ||||
| src/apis/authentication_api.rs | ||||
| src/apis/block_management_api.rs | ||||
| src/apis/configuration.rs | ||||
| src/apis/file_management_api.rs | ||||
| src/apis/flist_management_api.rs | ||||
| src/apis/mod.rs | ||||
| src/apis/system_api.rs | ||||
| src/apis/website_serving_api.rs | ||||
| src/lib.rs | ||||
| src/models/block_downloads_response.rs | ||||
| src/models/block_info.rs | ||||
| src/models/block_uploaded_response.rs | ||||
| src/models/blocks_response.rs | ||||
| src/models/dir_list_template.rs | ||||
| src/models/dir_lister.rs | ||||
| src/models/error_template.rs | ||||
| src/models/file_download_request.rs | ||||
| src/models/file_info.rs | ||||
| src/models/file_upload_response.rs | ||||
| src/models/flist_body.rs | ||||
| src/models/flist_state.rs | ||||
| src/models/flist_state_accepted.rs | ||||
| src/models/flist_state_created.rs | ||||
| src/models/flist_state_in_progress.rs | ||||
| src/models/flist_state_info.rs | ||||
| src/models/flist_state_response.rs | ||||
| src/models/flist_state_started.rs | ||||
| src/models/health_response.rs | ||||
| src/models/job.rs | ||||
| src/models/list_blocks_params.rs | ||||
| src/models/list_blocks_response.rs | ||||
| src/models/mod.rs | ||||
| src/models/preview_response.rs | ||||
| src/models/response_error.rs | ||||
| src/models/response_error_bad_request.rs | ||||
| src/models/response_error_conflict.rs | ||||
| src/models/response_error_forbidden.rs | ||||
| src/models/response_error_not_found.rs | ||||
| src/models/response_error_template_error.rs | ||||
| src/models/response_error_unauthorized.rs | ||||
| src/models/response_result.rs | ||||
| src/models/response_result_block_uploaded.rs | ||||
| src/models/response_result_dir_template.rs | ||||
| src/models/response_result_file_uploaded.rs | ||||
| src/models/response_result_flist_created.rs | ||||
| src/models/response_result_flist_state.rs | ||||
| src/models/response_result_flists.rs | ||||
| src/models/response_result_preview_flist.rs | ||||
| src/models/response_result_res.rs | ||||
| src/models/response_result_signed_in.rs | ||||
| src/models/sign_in_body.rs | ||||
| src/models/sign_in_response.rs | ||||
| src/models/template_err.rs | ||||
| src/models/template_err_bad_request.rs | ||||
| src/models/template_err_internal_server_error.rs | ||||
| src/models/template_err_not_found.rs | ||||
| src/models/upload_block_params.rs | ||||
| src/models/user_block_info.rs | ||||
| src/models/user_blocks_response.rs | ||||
| src/models/verify_block.rs | ||||
| src/models/verify_blocks_request.rs | ||||
| src/models/verify_blocks_response.rs | ||||
| @@ -1 +0,0 @@ | ||||
| 7.13.0 | ||||
| @@ -1 +0,0 @@ | ||||
| language: rust | ||||
| @@ -1,15 +0,0 @@ | ||||
| [package] | ||||
| name = "openapi" | ||||
| version = "0.2.0" | ||||
| authors = ["OpenAPI Generator team and contributors"] | ||||
| description = "No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)" | ||||
| license = "" | ||||
| edition = "2021" | ||||
|  | ||||
| [dependencies] | ||||
| serde = { version = "^1.0", features = ["derive"] } | ||||
| serde_with = { version = "^3.8", default-features = false, features = ["base64", "std", "macros"] } | ||||
| serde_json = "^1.0" | ||||
| serde_repr = "^0.1" | ||||
| url = "^2.5" | ||||
| reqwest = { version = "^0.12", default-features = false, features = ["json", "multipart"] } | ||||
| @@ -1,114 +0,0 @@ | ||||
| # Rust API client for openapi | ||||
|  | ||||
| No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  | ||||
|  | ||||
| ## Overview | ||||
|  | ||||
| This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client. | ||||
|  | ||||
| - API version: 0.2.0 | ||||
| - Package version: 0.2.0 | ||||
| - Generator version: 7.13.0 | ||||
| - Build package: `org.openapitools.codegen.languages.RustClientCodegen` | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| Put the package under your project folder in a directory named `openapi` and add the following to `Cargo.toml` under `[dependencies]`: | ||||
|  | ||||
| ``` | ||||
| openapi = { path = "./openapi" } | ||||
| ``` | ||||
|  | ||||
| ## Documentation for API Endpoints | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Class | Method | HTTP request | Description | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| *AuthenticationApi* | [**sign_in_handler**](docs/AuthenticationApi.md#sign_in_handler) | **POST** /api/v1/signin |  | ||||
| *BlockManagementApi* | [**check_block_handler**](docs/BlockManagementApi.md#check_block_handler) | **HEAD** /api/v1/block/{hash} | Checks a block by its hash. | ||||
| *BlockManagementApi* | [**get_block_downloads_handler**](docs/BlockManagementApi.md#get_block_downloads_handler) | **GET** /api/v1/block/{hash}/downloads | Retrieve the number of times a block has been downloaded. | ||||
| *BlockManagementApi* | [**get_block_handler**](docs/BlockManagementApi.md#get_block_handler) | **GET** /api/v1/block/{hash} | Retrieve a block by its hash. | ||||
| *BlockManagementApi* | [**get_blocks_by_hash_handler**](docs/BlockManagementApi.md#get_blocks_by_hash_handler) | **GET** /api/v1/blocks/{hash} | Retrieve blocks by hash (file hash or block hash). | ||||
| *BlockManagementApi* | [**get_user_blocks_handler**](docs/BlockManagementApi.md#get_user_blocks_handler) | **GET** /api/v1/user/blocks | Retrieve all blocks uploaded by a specific user. | ||||
| *BlockManagementApi* | [**list_blocks_handler**](docs/BlockManagementApi.md#list_blocks_handler) | **GET** /api/v1/blocks | List all block hashes in the server with pagination | ||||
| *BlockManagementApi* | [**upload_block_handler**](docs/BlockManagementApi.md#upload_block_handler) | **POST** /api/v1/block | Upload a block to the server. | ||||
| *BlockManagementApi* | [**verify_blocks_handler**](docs/BlockManagementApi.md#verify_blocks_handler) | **POST** /api/v1/block/verify | Verify if multiple blocks exist on the server. | ||||
| *FileManagementApi* | [**get_file_handler**](docs/FileManagementApi.md#get_file_handler) | **GET** /api/v1/file/{hash} | Retrieve a file by its hash from path, with optional custom filename in request body. | ||||
| *FileManagementApi* | [**upload_file_handler**](docs/FileManagementApi.md#upload_file_handler) | **POST** /api/v1/file | Upload a file to the server. | ||||
| *FlistManagementApi* | [**create_flist_handler**](docs/FlistManagementApi.md#create_flist_handler) | **POST** /api/v1/fl |  | ||||
| *FlistManagementApi* | [**get_flist_state_handler**](docs/FlistManagementApi.md#get_flist_state_handler) | **GET** /api/v1/fl/{job_id} |  | ||||
| *FlistManagementApi* | [**list_flists_handler**](docs/FlistManagementApi.md#list_flists_handler) | **GET** /api/v1/fl |  | ||||
| *FlistManagementApi* | [**preview_flist_handler**](docs/FlistManagementApi.md#preview_flist_handler) | **GET** /api/v1/fl/preview/{flist_path} |  | ||||
| *FlistManagementApi* | [**serve_flists**](docs/FlistManagementApi.md#serve_flists) | **GET** /{path} | Serve flist files from the server's filesystem | ||||
| *SystemApi* | [**health_check_handler**](docs/SystemApi.md#health_check_handler) | **GET** /api/v1 |  | ||||
| *WebsiteServingApi* | [**serve_website_handler**](docs/WebsiteServingApi.md#serve_website_handler) | **GET** /api/v1/website/{website_hash}/{path} |  | ||||
|  | ||||
|  | ||||
| ## Documentation For Models | ||||
|  | ||||
|  - [BlockDownloadsResponse](docs/BlockDownloadsResponse.md) | ||||
|  - [BlockInfo](docs/BlockInfo.md) | ||||
|  - [BlockUploadedResponse](docs/BlockUploadedResponse.md) | ||||
|  - [BlocksResponse](docs/BlocksResponse.md) | ||||
|  - [DirListTemplate](docs/DirListTemplate.md) | ||||
|  - [DirLister](docs/DirLister.md) | ||||
|  - [ErrorTemplate](docs/ErrorTemplate.md) | ||||
|  - [FileDownloadRequest](docs/FileDownloadRequest.md) | ||||
|  - [FileInfo](docs/FileInfo.md) | ||||
|  - [FileUploadResponse](docs/FileUploadResponse.md) | ||||
|  - [FlistBody](docs/FlistBody.md) | ||||
|  - [FlistState](docs/FlistState.md) | ||||
|  - [FlistStateAccepted](docs/FlistStateAccepted.md) | ||||
|  - [FlistStateCreated](docs/FlistStateCreated.md) | ||||
|  - [FlistStateInProgress](docs/FlistStateInProgress.md) | ||||
|  - [FlistStateInfo](docs/FlistStateInfo.md) | ||||
|  - [FlistStateResponse](docs/FlistStateResponse.md) | ||||
|  - [FlistStateStarted](docs/FlistStateStarted.md) | ||||
|  - [HealthResponse](docs/HealthResponse.md) | ||||
|  - [Job](docs/Job.md) | ||||
|  - [ListBlocksParams](docs/ListBlocksParams.md) | ||||
|  - [ListBlocksResponse](docs/ListBlocksResponse.md) | ||||
|  - [PreviewResponse](docs/PreviewResponse.md) | ||||
|  - [ResponseError](docs/ResponseError.md) | ||||
|  - [ResponseErrorBadRequest](docs/ResponseErrorBadRequest.md) | ||||
|  - [ResponseErrorConflict](docs/ResponseErrorConflict.md) | ||||
|  - [ResponseErrorForbidden](docs/ResponseErrorForbidden.md) | ||||
|  - [ResponseErrorNotFound](docs/ResponseErrorNotFound.md) | ||||
|  - [ResponseErrorTemplateError](docs/ResponseErrorTemplateError.md) | ||||
|  - [ResponseErrorUnauthorized](docs/ResponseErrorUnauthorized.md) | ||||
|  - [ResponseResult](docs/ResponseResult.md) | ||||
|  - [ResponseResultBlockUploaded](docs/ResponseResultBlockUploaded.md) | ||||
|  - [ResponseResultDirTemplate](docs/ResponseResultDirTemplate.md) | ||||
|  - [ResponseResultFileUploaded](docs/ResponseResultFileUploaded.md) | ||||
|  - [ResponseResultFlistCreated](docs/ResponseResultFlistCreated.md) | ||||
|  - [ResponseResultFlistState](docs/ResponseResultFlistState.md) | ||||
|  - [ResponseResultFlists](docs/ResponseResultFlists.md) | ||||
|  - [ResponseResultPreviewFlist](docs/ResponseResultPreviewFlist.md) | ||||
|  - [ResponseResultRes](docs/ResponseResultRes.md) | ||||
|  - [ResponseResultSignedIn](docs/ResponseResultSignedIn.md) | ||||
|  - [SignInBody](docs/SignInBody.md) | ||||
|  - [SignInResponse](docs/SignInResponse.md) | ||||
|  - [TemplateErr](docs/TemplateErr.md) | ||||
|  - [TemplateErrBadRequest](docs/TemplateErrBadRequest.md) | ||||
|  - [TemplateErrInternalServerError](docs/TemplateErrInternalServerError.md) | ||||
|  - [TemplateErrNotFound](docs/TemplateErrNotFound.md) | ||||
|  - [UploadBlockParams](docs/UploadBlockParams.md) | ||||
|  - [UserBlockInfo](docs/UserBlockInfo.md) | ||||
|  - [UserBlocksResponse](docs/UserBlocksResponse.md) | ||||
|  - [VerifyBlock](docs/VerifyBlock.md) | ||||
|  - [VerifyBlocksRequest](docs/VerifyBlocksRequest.md) | ||||
|  - [VerifyBlocksResponse](docs/VerifyBlocksResponse.md) | ||||
|  | ||||
|  | ||||
| To get access to the crate's generated documentation, use: | ||||
|  | ||||
| ``` | ||||
| cargo doc --open | ||||
| ``` | ||||
|  | ||||
| ## Author | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -1,37 +0,0 @@ | ||||
| # \AuthenticationApi | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Method | HTTP request | Description | ||||
| ------------- | ------------- | ------------- | ||||
| [**sign_in_handler**](AuthenticationApi.md#sign_in_handler) | **POST** /api/v1/signin |  | ||||
|  | ||||
|  | ||||
|  | ||||
| ## sign_in_handler | ||||
|  | ||||
| > models::SignInResponse sign_in_handler(sign_in_body) | ||||
|  | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **sign_in_body** | [**SignInBody**](SignInBody.md) |  | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::SignInResponse**](SignInResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: application/json | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
| @@ -1,14 +0,0 @@ | ||||
| # Block | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **data** | [**std::path::PathBuf**](std::path::PathBuf.md) |  |  | ||||
| **hash** | **String** |  |  | ||||
| **index** | **i64** |  |  | ||||
| **size** | **i32** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| # BlockDownloadsResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **block_hash** | **String** | Block hash |  | ||||
| **block_size** | **i64** | Size of the block in bytes |  | ||||
| **downloads_count** | **i64** | Number of times the block has been downloaded |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # BlockInfo | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **hash** | **String** | Block hash |  | ||||
| **index** | **i64** | Block index within the file |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,250 +0,0 @@ | ||||
| # \BlockManagementApi | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Method | HTTP request | Description | ||||
| ------------- | ------------- | ------------- | ||||
| [**check_block_handler**](BlockManagementApi.md#check_block_handler) | **HEAD** /api/v1/block/{hash} | Checks a block by its hash. | ||||
| [**get_block_downloads_handler**](BlockManagementApi.md#get_block_downloads_handler) | **GET** /api/v1/block/{hash}/downloads | Retrieve the number of times a block has been downloaded. | ||||
| [**get_block_handler**](BlockManagementApi.md#get_block_handler) | **GET** /api/v1/block/{hash} | Retrieve a block by its hash. | ||||
| [**get_blocks_by_hash_handler**](BlockManagementApi.md#get_blocks_by_hash_handler) | **GET** /api/v1/blocks/{hash} | Retrieve blocks by hash (file hash or block hash). | ||||
| [**get_user_blocks_handler**](BlockManagementApi.md#get_user_blocks_handler) | **GET** /api/v1/user/blocks | Retrieve all blocks uploaded by a specific user. | ||||
| [**list_blocks_handler**](BlockManagementApi.md#list_blocks_handler) | **GET** /api/v1/blocks | List all block hashes in the server with pagination | ||||
| [**upload_block_handler**](BlockManagementApi.md#upload_block_handler) | **POST** /api/v1/block | Upload a block to the server. | ||||
| [**verify_blocks_handler**](BlockManagementApi.md#verify_blocks_handler) | **POST** /api/v1/block/verify | Verify if multiple blocks exist on the server. | ||||
|  | ||||
|  | ||||
|  | ||||
| ## check_block_handler | ||||
|  | ||||
| > check_block_handler(hash) | ||||
| Checks a block by its hash. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **hash** | **String** | Block hash | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
|  (empty response body) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## get_block_downloads_handler | ||||
|  | ||||
| > models::BlockDownloadsResponse get_block_downloads_handler(hash) | ||||
| Retrieve the number of times a block has been downloaded. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **hash** | **String** | Block hash | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::BlockDownloadsResponse**](BlockDownloadsResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## get_block_handler | ||||
|  | ||||
| > std::path::PathBuf get_block_handler(hash) | ||||
| Retrieve a block by its hash. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **hash** | **String** | Block hash | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**std::path::PathBuf**](std::path::PathBuf.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/octet-stream, application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## get_blocks_by_hash_handler | ||||
|  | ||||
| > models::BlocksResponse get_blocks_by_hash_handler(hash) | ||||
| Retrieve blocks by hash (file hash or block hash). | ||||
|  | ||||
| If the hash is a file hash, returns all blocks with their block index related to that file. If the hash is a block hash, returns the block itself. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **hash** | **String** | File hash or block hash | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::BlocksResponse**](BlocksResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## get_user_blocks_handler | ||||
|  | ||||
| > models::UserBlocksResponse get_user_blocks_handler(page, per_page) | ||||
| Retrieve all blocks uploaded by a specific user. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **page** | Option<**i32**> | Page number (1-indexed) |  | | ||||
| **per_page** | Option<**i32**> | Number of items per page |  | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::UserBlocksResponse**](UserBlocksResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| [bearerAuth](../README.md#bearerAuth) | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## list_blocks_handler | ||||
|  | ||||
| > models::ListBlocksResponse list_blocks_handler(page, per_page) | ||||
| List all block hashes in the server with pagination | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **page** | Option<**i32**> | Page number (1-indexed) |  | | ||||
| **per_page** | Option<**i32**> | Number of items per page |  | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::ListBlocksResponse**](ListBlocksResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## upload_block_handler | ||||
|  | ||||
| > models::BlockUploadedResponse upload_block_handler(file_hash, idx, body) | ||||
| Upload a block to the server. | ||||
|  | ||||
| If the block already exists, the server will return a 200 OK response. If the block is new, the server will return a 201 Created response. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **file_hash** | **String** | File hash associated with the block | [required] | | ||||
| **idx** | **i64** | Block index within the file | [required] | | ||||
| **body** | **std::path::PathBuf** | Block data to upload | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::BlockUploadedResponse**](BlockUploadedResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| [bearerAuth](../README.md#bearerAuth) | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: application/octet-stream | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## verify_blocks_handler | ||||
|  | ||||
| > models::VerifyBlocksResponse verify_blocks_handler(verify_blocks_request) | ||||
| Verify if multiple blocks exist on the server. | ||||
|  | ||||
| Returns a list of missing blocks. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **verify_blocks_request** | [**VerifyBlocksRequest**](VerifyBlocksRequest.md) | List of block hashes to verify | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::VerifyBlocksResponse**](VerifyBlocksResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: application/json | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # BlockUploadedResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **hash** | **String** |  |  | ||||
| **message** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # BlocksResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **blocks** | [**Vec<models::BlockInfo>**](BlockInfo.md) | List of blocks with their indices |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # DirListTemplate | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **cur_path** | **String** |  |  | ||||
| **lister** | [**models::DirLister**](DirLister.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # DirLister | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **files** | [**Vec<models::FileInfo>**](FileInfo.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| # ErrorTemplate | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **cur_path** | **String** |  |  | ||||
| **err** | [**models::TemplateErr**](TemplateErr.md) |  |  | ||||
| **message** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # File | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **file_content** | [**std::path::PathBuf**](std::path::PathBuf.md) |  |  | ||||
| **file_hash** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # FileDownloadRequest | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **file_name** | **String** | The custom filename to use for download |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,16 +0,0 @@ | ||||
| # FileInfo | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **is_file** | **bool** |  |  | ||||
| **last_modified** | **i64** |  |  | ||||
| **name** | **String** |  |  | ||||
| **path_uri** | **String** |  |  | ||||
| **progress** | **f32** |  |  | ||||
| **size** | **i64** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,71 +0,0 @@ | ||||
| # \FileManagementApi | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Method | HTTP request | Description | ||||
| ------------- | ------------- | ------------- | ||||
| [**get_file_handler**](FileManagementApi.md#get_file_handler) | **GET** /api/v1/file/{hash} | Retrieve a file by its hash from path, with optional custom filename in request body. | ||||
| [**upload_file_handler**](FileManagementApi.md#upload_file_handler) | **POST** /api/v1/file | Upload a file to the server. | ||||
|  | ||||
|  | ||||
|  | ||||
| ## get_file_handler | ||||
|  | ||||
| > std::path::PathBuf get_file_handler(hash, file_download_request) | ||||
| Retrieve a file by its hash from path, with optional custom filename in request body. | ||||
|  | ||||
| The file will be reconstructed from its blocks. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **hash** | **String** | File hash | [required] | | ||||
| **file_download_request** | [**FileDownloadRequest**](FileDownloadRequest.md) | Optional custom filename for download | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**std::path::PathBuf**](std::path::PathBuf.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: application/json | ||||
| - **Accept**: application/octet-stream, application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## upload_file_handler | ||||
|  | ||||
| > models::FileUploadResponse upload_file_handler(body) | ||||
| Upload a file to the server. | ||||
|  | ||||
| The file will be split into blocks and stored in the database. | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **body** | **std::path::PathBuf** | File data to upload | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::FileUploadResponse**](FileUploadResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| [bearerAuth](../README.md#bearerAuth) | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: application/octet-stream | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # FileUploadResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **file_hash** | **String** | The file hash |  | ||||
| **message** | **String** | Message indicating success |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,18 +0,0 @@ | ||||
| # FlistBody | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **auth** | Option<**String**> |  | [optional] | ||||
| **email** | Option<**String**> |  | [optional] | ||||
| **identity_token** | Option<**String**> |  | [optional] | ||||
| **image_name** | **String** |  |  | ||||
| **password** | Option<**String**> |  | [optional] | ||||
| **registry_token** | Option<**String**> |  | [optional] | ||||
| **server_address** | Option<**String**> |  | [optional] | ||||
| **username** | Option<**String**> |  | [optional] | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,150 +0,0 @@ | ||||
| # \FlistManagementApi | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Method | HTTP request | Description | ||||
| ------------- | ------------- | ------------- | ||||
| [**create_flist_handler**](FlistManagementApi.md#create_flist_handler) | **POST** /api/v1/fl |  | ||||
| [**get_flist_state_handler**](FlistManagementApi.md#get_flist_state_handler) | **GET** /api/v1/fl/{job_id} |  | ||||
| [**list_flists_handler**](FlistManagementApi.md#list_flists_handler) | **GET** /api/v1/fl |  | ||||
| [**preview_flist_handler**](FlistManagementApi.md#preview_flist_handler) | **GET** /api/v1/fl/preview/{flist_path} |  | ||||
| [**serve_flists**](FlistManagementApi.md#serve_flists) | **GET** /{path} | Serve flist files from the server's filesystem | ||||
|  | ||||
|  | ||||
|  | ||||
| ## create_flist_handler | ||||
|  | ||||
| > models::Job create_flist_handler(flist_body) | ||||
|  | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **flist_body** | [**FlistBody**](FlistBody.md) |  | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::Job**](Job.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| [bearerAuth](../README.md#bearerAuth) | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: application/json | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## get_flist_state_handler | ||||
|  | ||||
| > models::FlistStateResponse get_flist_state_handler(job_id) | ||||
|  | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **job_id** | **String** | flist job id | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::FlistStateResponse**](FlistStateResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| [bearerAuth](../README.md#bearerAuth) | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## list_flists_handler | ||||
|  | ||||
| > std::collections::HashMap<String, Vec<models::FileInfo>> list_flists_handler() | ||||
|  | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
| This endpoint does not need any parameter. | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**std::collections::HashMap<String, Vec<models::FileInfo>>**](Vec.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## preview_flist_handler | ||||
|  | ||||
| > models::PreviewResponse preview_flist_handler(flist_path) | ||||
|  | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **flist_path** | **String** | flist file path | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::PreviewResponse**](PreviewResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| ## serve_flists | ||||
|  | ||||
| > std::path::PathBuf serve_flists(path) | ||||
| Serve flist files from the server's filesystem | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **path** | **String** | Path to the flist file or directory to serve | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**std::path::PathBuf**](std::path::PathBuf.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/octet-stream, application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
| @@ -1,37 +0,0 @@ | ||||
| # \FlistServingApi | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Method | HTTP request | Description | ||||
| ------------- | ------------- | ------------- | ||||
| [**serve_flists**](FlistServingApi.md#serve_flists) | **GET** /{path} | Serve flist files from the server's filesystem | ||||
|  | ||||
|  | ||||
|  | ||||
| ## serve_flists | ||||
|  | ||||
| > models::ResponseResult serve_flists(path) | ||||
| Serve flist files from the server's filesystem | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **path** | **String** | Path to the flist file or directory to serve | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::ResponseResult**](ResponseResult.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
| @@ -1,15 +0,0 @@ | ||||
| # FlistState | ||||
|  | ||||
| ## Enum Variants | ||||
|  | ||||
| | Name | Description | | ||||
| |---- | -----| | ||||
| | FlistStateAccepted |  | | ||||
| | FlistStateCreated |  | | ||||
| | FlistStateInProgress |  | | ||||
| | FlistStateStarted |  | | ||||
| | String |  | | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # FlistStateAccepted | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **accepted** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # FlistStateCreated | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **created** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # FlistStateInProgress | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **in_progress** | [**models::FlistStateInfo**](FlistStateInfo.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # FlistStateInfo | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **msg** | **String** |  |  | ||||
| **progress** | **f32** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # FlistStateResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **flist_state** | [**models::FlistState**](FlistState.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # FlistStateStarted | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **started** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # HealthResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **msg** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # Job | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **id** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # ListBlocksParams | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **page** | Option<**i32**> | Page number (1-indexed) | [optional][default to 1] | ||||
| **per_page** | Option<**i32**> | Number of items per page | [optional][default to 50] | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,14 +0,0 @@ | ||||
| # ListBlocksResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **blocks** | **Vec<String>** | List of block hashes |  | ||||
| **page** | **i32** | Current page number |  | ||||
| **per_page** | **i32** | Number of items per page |  | ||||
| **total** | **i64** | Total number of blocks |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| # PreviewResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **checksum** | **String** |  |  | ||||
| **content** | **Vec<String>** |  |  | ||||
| **metadata** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,17 +0,0 @@ | ||||
| # ResponseError | ||||
|  | ||||
| ## Enum Variants | ||||
|  | ||||
| | Name | Description | | ||||
| |---- | -----| | ||||
| | ResponseErrorBadRequest |  | | ||||
| | ResponseErrorConflict |  | | ||||
| | ResponseErrorForbidden |  | | ||||
| | ResponseErrorNotFound |  | | ||||
| | ResponseErrorTemplateError |  | | ||||
| | ResponseErrorUnauthorized |  | | ||||
| | String |  | | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseErrorBadRequest | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **bad_request** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseErrorConflict | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **conflict** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseErrorForbidden | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **forbidden** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseErrorNotFound | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **not_found** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseErrorTemplateError | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **template_error** | [**models::ErrorTemplate**](ErrorTemplate.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseErrorUnauthorized | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **unauthorized** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,20 +0,0 @@ | ||||
| # ResponseResult | ||||
|  | ||||
| ## Enum Variants | ||||
|  | ||||
| | Name | Description | | ||||
| |---- | -----| | ||||
| | ResponseResultBlockUploaded |  | | ||||
| | ResponseResultDirTemplate |  | | ||||
| | ResponseResultFileUploaded |  | | ||||
| | ResponseResultFlistCreated |  | | ||||
| | ResponseResultFlistState |  | | ||||
| | ResponseResultFlists |  | | ||||
| | ResponseResultPreviewFlist |  | | ||||
| | ResponseResultRes |  | | ||||
| | ResponseResultSignedIn |  | | ||||
| | String |  | | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultBlockUploaded | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **block_uploaded** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultDirTemplate | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **dir_template** | [**models::DirListTemplate**](DirListTemplate.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultFileUploaded | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **file_uploaded** | [**models::FileUploadResponse**](FileUploadResponse.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultFlistCreated | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **flist_created** | [**models::Job**](Job.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultFlistState | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **flist_state** | [**models::FlistState**](FlistState.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultFlists | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **flists** | [**std::collections::HashMap<String, Vec<models::FileInfo>>**](Vec.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultPreviewFlist | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **preview_flist** | [**models::PreviewResponse**](PreviewResponse.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultRes | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **res** | [**std::path::PathBuf**](std::path::PathBuf.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # ResponseResultSignedIn | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **signed_in** | [**models::SignInResponse**](SignInResponse.md) |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # SignInBody | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **password** | **String** |  |  | ||||
| **username** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # SignInResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **access_token** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,34 +0,0 @@ | ||||
| # \SystemApi | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Method | HTTP request | Description | ||||
| ------------- | ------------- | ------------- | ||||
| [**health_check_handler**](SystemApi.md#health_check_handler) | **GET** /api/v1 |  | ||||
|  | ||||
|  | ||||
|  | ||||
| ## health_check_handler | ||||
|  | ||||
| > models::HealthResponse health_check_handler() | ||||
|  | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
| This endpoint does not need any parameter. | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**models::HealthResponse**](HealthResponse.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| # TemplateErr | ||||
|  | ||||
| ## Enum Variants | ||||
|  | ||||
| | Name | Description | | ||||
| |---- | -----| | ||||
| | TemplateErrBadRequest |  | | ||||
| | TemplateErrInternalServerError |  | | ||||
| | TemplateErrNotFound |  | | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # TemplateErrBadRequest | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **bad_request** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # TemplateErrInternalServerError | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **internal_server_error** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # TemplateErrNotFound | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **not_found** | **String** |  |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # UploadBlockParams | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **file_hash** | **String** | File hash associated with the block |  | ||||
| **idx** | **i64** | Block index within the file |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,12 +0,0 @@ | ||||
| # UserBlockInfo | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **hash** | **String** | Block hash |  | ||||
| **size** | **i64** | Block size in bytes |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| # UserBlocksResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **all_blocks** | **i64** | Total number of all blocks |  | ||||
| **blocks** | [**Vec<models::UserBlockInfo>**](UserBlockInfo.md) | List of blocks with their sizes |  | ||||
| **total** | **i64** | Total number of blocks |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,13 +0,0 @@ | ||||
| # VerifyBlock | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **block_hash** | **String** | Block hash to verify |  | ||||
| **block_index** | **i64** | Block index within the file |  | ||||
| **file_hash** | **String** | File hash associated with the block |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # VerifyBlocksRequest | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **blocks** | [**Vec<models::VerifyBlock>**](VerifyBlock.md) | List of blocks to verify |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| # VerifyBlocksResponse | ||||
|  | ||||
| ## Properties | ||||
|  | ||||
| Name | Type | Description | Notes | ||||
| ------------ | ------------- | ------------- | ------------- | ||||
| **missing** | **Vec<String>** | List of block hashes that are missing on the server |  | ||||
|  | ||||
| [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) | ||||
|  | ||||
|  | ||||
| @@ -1,38 +0,0 @@ | ||||
| # \WebsiteServingApi | ||||
|  | ||||
| All URIs are relative to *http://localhost* | ||||
|  | ||||
| Method | HTTP request | Description | ||||
| ------------- | ------------- | ------------- | ||||
| [**serve_website_handler**](WebsiteServingApi.md#serve_website_handler) | **GET** /api/v1/website/{website_hash}/{path} |  | ||||
|  | ||||
|  | ||||
|  | ||||
| ## serve_website_handler | ||||
|  | ||||
| > std::path::PathBuf serve_website_handler(website_hash, path) | ||||
|  | ||||
|  | ||||
| ### Parameters | ||||
|  | ||||
|  | ||||
| Name | Type | Description  | Required | Notes | ||||
| ------------- | ------------- | ------------- | ------------- | ------------- | ||||
| **website_hash** | **String** | flist hash of the website directory | [required] | | ||||
| **path** | **String** | Path to the file within the website directory, defaults to index.html if empty | [required] | | ||||
|  | ||||
| ### Return type | ||||
|  | ||||
| [**std::path::PathBuf**](std::path::PathBuf.md) | ||||
|  | ||||
| ### Authorization | ||||
|  | ||||
| No authorization required | ||||
|  | ||||
| ### HTTP request headers | ||||
|  | ||||
| - **Content-Type**: Not defined | ||||
| - **Accept**: application/octet-stream, application/json | ||||
|  | ||||
| [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) | ||||
|  | ||||
| @@ -1,57 +0,0 @@ | ||||
| #!/bin/sh | ||||
| # ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ | ||||
| # | ||||
| # Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" | ||||
|  | ||||
| git_user_id=$1 | ||||
| git_repo_id=$2 | ||||
| release_note=$3 | ||||
| git_host=$4 | ||||
|  | ||||
| if [ "$git_host" = "" ]; then | ||||
|     git_host="github.com" | ||||
|     echo "[INFO] No command line input provided. Set \$git_host to $git_host" | ||||
| fi | ||||
|  | ||||
| if [ "$git_user_id" = "" ]; then | ||||
|     git_user_id="GIT_USER_ID" | ||||
|     echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" | ||||
| fi | ||||
|  | ||||
| if [ "$git_repo_id" = "" ]; then | ||||
|     git_repo_id="GIT_REPO_ID" | ||||
|     echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" | ||||
| fi | ||||
|  | ||||
| if [ "$release_note" = "" ]; then | ||||
|     release_note="Minor update" | ||||
|     echo "[INFO] No command line input provided. Set \$release_note to $release_note" | ||||
| fi | ||||
|  | ||||
| # Initialize the local directory as a Git repository | ||||
| git init | ||||
|  | ||||
| # Adds the files in the local repository and stages them for commit. | ||||
| git add . | ||||
|  | ||||
| # Commits the tracked changes and prepares them to be pushed to a remote repository. | ||||
| git commit -m "$release_note" | ||||
|  | ||||
| # Sets the new remote | ||||
| git_remote=$(git remote) | ||||
| if [ "$git_remote" = "" ]; then # git remote not defined | ||||
|  | ||||
|     if [ "$GIT_TOKEN" = "" ]; then | ||||
|         echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." | ||||
|         git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git | ||||
|     else | ||||
|         git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git | ||||
|     fi | ||||
|  | ||||
| fi | ||||
|  | ||||
| git pull origin master | ||||
|  | ||||
| # Pushes (Forces) the changes in the local repository up to the remote repository | ||||
| echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" | ||||
| git push origin master 2>&1 | grep -v 'To https' | ||||
| @@ -1,64 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
| use reqwest; | ||||
| use serde::{Deserialize, Serialize, de::Error as _}; | ||||
| use crate::{apis::ResponseContent, models}; | ||||
| use super::{Error, configuration, ContentType}; | ||||
|  | ||||
|  | ||||
| /// struct for typed errors of method [`sign_in_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum SignInHandlerError { | ||||
|     Status401(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
|  | ||||
| pub async fn sign_in_handler(configuration: &configuration::Configuration, sign_in_body: models::SignInBody) -> Result<models::SignInResponse, Error<SignInHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_sign_in_body = sign_in_body; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/signin", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     req_builder = req_builder.json(&p_sign_in_body); | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::SignInResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::SignInResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<SignInHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,385 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
| use reqwest; | ||||
| use serde::{Deserialize, Serialize, de::Error as _}; | ||||
| use crate::{apis::ResponseContent, models}; | ||||
| use super::{Error, configuration, ContentType}; | ||||
|  | ||||
|  | ||||
| /// struct for typed errors of method [`check_block_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum CheckBlockHandlerError { | ||||
|     Status404(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`get_block_downloads_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum GetBlockDownloadsHandlerError { | ||||
|     Status404(), | ||||
|     Status500(), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`get_block_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum GetBlockHandlerError { | ||||
|     Status404(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`get_blocks_by_hash_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum GetBlocksByHashHandlerError { | ||||
|     Status404(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`get_user_blocks_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum GetUserBlocksHandlerError { | ||||
|     Status401(), | ||||
|     Status500(), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`list_blocks_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum ListBlocksHandlerError { | ||||
|     Status400(), | ||||
|     Status500(), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`upload_block_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum UploadBlockHandlerError { | ||||
|     Status400(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`verify_blocks_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum VerifyBlocksHandlerError { | ||||
|     Status400(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
|  | ||||
| pub async fn check_block_handler(configuration: &configuration::Configuration, hash: &str) -> Result<(), Error<CheckBlockHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_hash = hash; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/block/{hash}", configuration.base_path, hash=crate::apis::urlencode(p_hash)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::HEAD, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         Ok(()) | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<CheckBlockHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn get_block_downloads_handler(configuration: &configuration::Configuration, hash: &str) -> Result<models::BlockDownloadsResponse, Error<GetBlockDownloadsHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_hash = hash; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/block/{hash}/downloads", configuration.base_path, hash=crate::apis::urlencode(p_hash)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::BlockDownloadsResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::BlockDownloadsResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<GetBlockDownloadsHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn get_block_handler(configuration: &configuration::Configuration, hash: &str) -> Result<reqwest::Response, Error<GetBlockHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_hash = hash; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/block/{hash}", configuration.base_path, hash=crate::apis::urlencode(p_hash)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         Ok(resp) | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<GetBlockHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// If the hash is a file hash, returns all blocks with their block index related to that file. If the hash is a block hash, returns the block itself. | ||||
| pub async fn get_blocks_by_hash_handler(configuration: &configuration::Configuration, hash: &str) -> Result<models::BlocksResponse, Error<GetBlocksByHashHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_hash = hash; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/blocks/{hash}", configuration.base_path, hash=crate::apis::urlencode(p_hash)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::BlocksResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::BlocksResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<GetBlocksByHashHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn get_user_blocks_handler(configuration: &configuration::Configuration, page: Option<i32>, per_page: Option<i32>) -> Result<models::UserBlocksResponse, Error<GetUserBlocksHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_page = page; | ||||
|     let p_per_page = per_page; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/user/blocks", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref param_value) = p_page { | ||||
|         req_builder = req_builder.query(&[("page", ¶m_value.to_string())]); | ||||
|     } | ||||
|     if let Some(ref param_value) = p_per_page { | ||||
|         req_builder = req_builder.query(&[("per_page", ¶m_value.to_string())]); | ||||
|     } | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     if let Some(ref token) = configuration.bearer_access_token { | ||||
|         req_builder = req_builder.bearer_auth(token.to_owned()); | ||||
|     }; | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::UserBlocksResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::UserBlocksResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<GetUserBlocksHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn list_blocks_handler(configuration: &configuration::Configuration, page: Option<i32>, per_page: Option<i32>) -> Result<models::ListBlocksResponse, Error<ListBlocksHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_page = page; | ||||
|     let p_per_page = per_page; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/blocks", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref param_value) = p_page { | ||||
|         req_builder = req_builder.query(&[("page", ¶m_value.to_string())]); | ||||
|     } | ||||
|     if let Some(ref param_value) = p_per_page { | ||||
|         req_builder = req_builder.query(&[("per_page", ¶m_value.to_string())]); | ||||
|     } | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::ListBlocksResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::ListBlocksResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<ListBlocksHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// If the block already exists, the server will return a 200 OK response. If the block is new, the server will return a 201 Created response. | ||||
| pub async fn upload_block_handler(configuration: &configuration::Configuration, file_hash: &str, idx: i64, body: std::path::PathBuf) -> Result<models::BlockUploadedResponse, Error<UploadBlockHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_file_hash = file_hash; | ||||
|     let p_idx = idx; | ||||
|     let p_body = body; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/block", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str); | ||||
|  | ||||
|     req_builder = req_builder.query(&[("file_hash", &p_file_hash.to_string())]); | ||||
|     req_builder = req_builder.query(&[("idx", &p_idx.to_string())]); | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     if let Some(ref token) = configuration.bearer_access_token { | ||||
|         req_builder = req_builder.bearer_auth(token.to_owned()); | ||||
|     }; | ||||
|     let file_content = std::fs::read(&p_body).map_err(|e| Error::Io(e))?; | ||||
|     req_builder = req_builder.body(file_content); | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::BlockUploadedResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::BlockUploadedResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<UploadBlockHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// Returns a list of missing blocks. | ||||
| pub async fn verify_blocks_handler(configuration: &configuration::Configuration, verify_blocks_request: models::VerifyBlocksRequest) -> Result<models::VerifyBlocksResponse, Error<VerifyBlocksHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_verify_blocks_request = verify_blocks_request; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/block/verify", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     req_builder = req_builder.json(&p_verify_blocks_request); | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::VerifyBlocksResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::VerifyBlocksResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<VerifyBlocksHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,51 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
|  | ||||
| #[derive(Debug, Clone)] | ||||
| pub struct Configuration { | ||||
|     pub base_path: String, | ||||
|     pub user_agent: Option<String>, | ||||
|     pub client: reqwest::Client, | ||||
|     pub basic_auth: Option<BasicAuth>, | ||||
|     pub oauth_access_token: Option<String>, | ||||
|     pub bearer_access_token: Option<String>, | ||||
|     pub api_key: Option<ApiKey>, | ||||
| } | ||||
|  | ||||
| pub type BasicAuth = (String, Option<String>); | ||||
|  | ||||
| #[derive(Debug, Clone)] | ||||
| pub struct ApiKey { | ||||
|     pub prefix: Option<String>, | ||||
|     pub key: String, | ||||
| } | ||||
|  | ||||
|  | ||||
| impl Configuration { | ||||
|     pub fn new() -> Configuration { | ||||
|         Configuration::default() | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl Default for Configuration { | ||||
|     fn default() -> Self { | ||||
|         Configuration { | ||||
|             base_path: "http://localhost".to_owned(), | ||||
|             user_agent: Some("OpenAPI-Generator/0.2.0/rust".to_owned()), | ||||
|             client: reqwest::Client::new(), | ||||
|             basic_auth: None, | ||||
|             oauth_access_token: None, | ||||
|             bearer_access_token: None, | ||||
|             api_key: None, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,106 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
| use reqwest; | ||||
| use serde::{Deserialize, Serialize, de::Error as _}; | ||||
| use crate::{apis::ResponseContent, models}; | ||||
| use super::{Error, configuration, ContentType}; | ||||
|  | ||||
|  | ||||
| /// struct for typed errors of method [`get_file_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum GetFileHandlerError { | ||||
|     Status404(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`upload_file_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum UploadFileHandlerError { | ||||
|     Status400(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
|  | ||||
| /// The file will be reconstructed from its blocks. | ||||
| pub async fn get_file_handler(configuration: &configuration::Configuration, hash: &str, file_download_request: models::FileDownloadRequest) -> Result<reqwest::Response, Error<GetFileHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_hash = hash; | ||||
|     let p_file_download_request = file_download_request; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/file/{hash}", configuration.base_path, hash=crate::apis::urlencode(p_hash)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     req_builder = req_builder.json(&p_file_download_request); | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         Ok(resp) | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<GetFileHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| /// The file will be split into blocks and stored in the database. | ||||
| pub async fn upload_file_handler(configuration: &configuration::Configuration, body: std::path::PathBuf) -> Result<models::FileUploadResponse, Error<UploadFileHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_body = body; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/file", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     if let Some(ref token) = configuration.bearer_access_token { | ||||
|         req_builder = req_builder.bearer_auth(token.to_owned()); | ||||
|     }; | ||||
|     let file_content = std::fs::read(&p_body).map_err(|e| Error::Io(e))?; | ||||
|     req_builder = req_builder.body(file_content); | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::FileUploadResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::FileUploadResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<UploadFileHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,244 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
| use reqwest; | ||||
| use serde::{Deserialize, Serialize, de::Error as _}; | ||||
| use crate::{apis::ResponseContent, models}; | ||||
| use super::{Error, configuration, ContentType}; | ||||
|  | ||||
|  | ||||
| /// struct for typed errors of method [`create_flist_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum CreateFlistHandlerError { | ||||
|     Status401(models::ResponseError), | ||||
|     Status403(models::ResponseError), | ||||
|     Status409(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`get_flist_state_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum GetFlistStateHandlerError { | ||||
|     Status401(models::ResponseError), | ||||
|     Status403(models::ResponseError), | ||||
|     Status404(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`list_flists_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum ListFlistsHandlerError { | ||||
|     Status401(models::ResponseError), | ||||
|     Status403(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`preview_flist_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum PreviewFlistHandlerError { | ||||
|     Status400(models::ResponseError), | ||||
|     Status401(models::ResponseError), | ||||
|     Status403(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
| /// struct for typed errors of method [`serve_flists`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum ServeFlistsError { | ||||
|     Status404(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
|  | ||||
| pub async fn create_flist_handler(configuration: &configuration::Configuration, flist_body: models::FlistBody) -> Result<models::Job, Error<CreateFlistHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_flist_body = flist_body; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/fl", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     if let Some(ref token) = configuration.bearer_access_token { | ||||
|         req_builder = req_builder.bearer_auth(token.to_owned()); | ||||
|     }; | ||||
|     req_builder = req_builder.json(&p_flist_body); | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Job`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Job`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<CreateFlistHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn get_flist_state_handler(configuration: &configuration::Configuration, job_id: &str) -> Result<models::FlistStateResponse, Error<GetFlistStateHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_job_id = job_id; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/fl/{job_id}", configuration.base_path, job_id=crate::apis::urlencode(p_job_id)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|     if let Some(ref token) = configuration.bearer_access_token { | ||||
|         req_builder = req_builder.bearer_auth(token.to_owned()); | ||||
|     }; | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::FlistStateResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::FlistStateResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<GetFlistStateHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn list_flists_handler(configuration: &configuration::Configuration, ) -> Result<std::collections::HashMap<String, Vec<models::FileInfo>>, Error<ListFlistsHandlerError>> { | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/fl", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `std::collections::HashMap<String, Vec<models::FileInfo>>`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `std::collections::HashMap<String, Vec<models::FileInfo>>`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<ListFlistsHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn preview_flist_handler(configuration: &configuration::Configuration, flist_path: &str) -> Result<models::PreviewResponse, Error<PreviewFlistHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_flist_path = flist_path; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/fl/preview/{flist_path}", configuration.base_path, flist_path=crate::apis::urlencode(p_flist_path)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::PreviewResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::PreviewResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<PreviewFlistHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub async fn serve_flists(configuration: &configuration::Configuration, path: &str) -> Result<reqwest::Response, Error<ServeFlistsError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_path = path; | ||||
|  | ||||
|     let uri_str = format!("{}/{path}", configuration.base_path, path=crate::apis::urlencode(p_path)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         Ok(resp) | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<ServeFlistsError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,63 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
| use reqwest; | ||||
| use serde::{Deserialize, Serialize, de::Error as _}; | ||||
| use crate::{apis::ResponseContent, models}; | ||||
| use super::{Error, configuration, ContentType}; | ||||
|  | ||||
|  | ||||
| /// struct for typed errors of method [`serve_flists`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum ServeFlistsError { | ||||
|     Status404(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
|  | ||||
| pub async fn serve_flists(configuration: &configuration::Configuration, path: &str) -> Result<models::ResponseResult, Error<ServeFlistsError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_path = path; | ||||
|  | ||||
|     let uri_str = format!("{}/{path}", configuration.base_path, path=crate::apis::urlencode(p_path)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::ResponseResult`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::ResponseResult`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<ServeFlistsError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,121 +0,0 @@ | ||||
| use std::error; | ||||
| use std::fmt; | ||||
|  | ||||
| #[derive(Debug, Clone)] | ||||
| pub struct ResponseContent<T> { | ||||
|     pub status: reqwest::StatusCode, | ||||
|     pub content: String, | ||||
|     pub entity: Option<T>, | ||||
| } | ||||
|  | ||||
| #[derive(Debug)] | ||||
| pub enum Error<T> { | ||||
|     Reqwest(reqwest::Error), | ||||
|     Serde(serde_json::Error), | ||||
|     Io(std::io::Error), | ||||
|     ResponseError(ResponseContent<T>), | ||||
| } | ||||
|  | ||||
| impl <T> fmt::Display for Error<T> { | ||||
|     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { | ||||
|         let (module, e) = match self { | ||||
|             Error::Reqwest(e) => ("reqwest", e.to_string()), | ||||
|             Error::Serde(e) => ("serde", e.to_string()), | ||||
|             Error::Io(e) => ("IO", e.to_string()), | ||||
|             Error::ResponseError(e) => ("response", format!("status code {}", e.status)), | ||||
|         }; | ||||
|         write!(f, "error in {}: {}", module, e) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl <T: fmt::Debug> error::Error for Error<T> { | ||||
|     fn source(&self) -> Option<&(dyn error::Error + 'static)> { | ||||
|         Some(match self { | ||||
|             Error::Reqwest(e) => e, | ||||
|             Error::Serde(e) => e, | ||||
|             Error::Io(e) => e, | ||||
|             Error::ResponseError(_) => return None, | ||||
|         }) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl <T> From<reqwest::Error> for Error<T> { | ||||
|     fn from(e: reqwest::Error) -> Self { | ||||
|         Error::Reqwest(e) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl <T> From<serde_json::Error> for Error<T> { | ||||
|     fn from(e: serde_json::Error) -> Self { | ||||
|         Error::Serde(e) | ||||
|     } | ||||
| } | ||||
|  | ||||
| impl <T> From<std::io::Error> for Error<T> { | ||||
|     fn from(e: std::io::Error) -> Self { | ||||
|         Error::Io(e) | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub fn urlencode<T: AsRef<str>>(s: T) -> String { | ||||
|     ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect() | ||||
| } | ||||
|  | ||||
| pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String, String)> { | ||||
|     if let serde_json::Value::Object(object) = value { | ||||
|         let mut params = vec![]; | ||||
|  | ||||
|         for (key, value) in object { | ||||
|             match value { | ||||
|                 serde_json::Value::Object(_) => params.append(&mut parse_deep_object( | ||||
|                     &format!("{}[{}]", prefix, key), | ||||
|                     value, | ||||
|                 )), | ||||
|                 serde_json::Value::Array(array) => { | ||||
|                     for (i, value) in array.iter().enumerate() { | ||||
|                         params.append(&mut parse_deep_object( | ||||
|                             &format!("{}[{}][{}]", prefix, key, i), | ||||
|                             value, | ||||
|                         )); | ||||
|                     } | ||||
|                 }, | ||||
|                 serde_json::Value::String(s) => params.push((format!("{}[{}]", prefix, key), s.clone())), | ||||
|                 _ => params.push((format!("{}[{}]", prefix, key), value.to_string())), | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return params; | ||||
|     } | ||||
|  | ||||
|     unimplemented!("Only objects are supported with style=deepObject") | ||||
| } | ||||
|  | ||||
| /// Internal use only | ||||
| /// A content type supported by this client. | ||||
| #[allow(dead_code)] | ||||
| enum ContentType { | ||||
|     Json, | ||||
|     Text, | ||||
|     Unsupported(String) | ||||
| } | ||||
|  | ||||
| impl From<&str> for ContentType { | ||||
|     fn from(content_type: &str) -> Self { | ||||
|         if content_type.starts_with("application") && content_type.contains("json") { | ||||
|             return Self::Json; | ||||
|         } else if content_type.starts_with("text/plain") { | ||||
|             return Self::Text; | ||||
|         } else { | ||||
|             return Self::Unsupported(content_type.to_string()); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub mod authentication_api; | ||||
| pub mod block_management_api; | ||||
| pub mod file_management_api; | ||||
| pub mod flist_management_api; | ||||
| pub mod system_api; | ||||
| pub mod website_serving_api; | ||||
|  | ||||
| pub mod configuration; | ||||
| @@ -1,59 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
| use reqwest; | ||||
| use serde::{Deserialize, Serialize, de::Error as _}; | ||||
| use crate::{apis::ResponseContent, models}; | ||||
| use super::{Error, configuration, ContentType}; | ||||
|  | ||||
|  | ||||
| /// struct for typed errors of method [`health_check_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum HealthCheckHandlerError { | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
|  | ||||
| pub async fn health_check_handler(configuration: &configuration::Configuration, ) -> Result<models::HealthResponse, Error<HealthCheckHandlerError>> { | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1", configuration.base_path); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|     let content_type = resp | ||||
|         .headers() | ||||
|         .get("content-type") | ||||
|         .and_then(|v| v.to_str().ok()) | ||||
|         .unwrap_or("application/octet-stream"); | ||||
|     let content_type = super::ContentType::from(content_type); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         let content = resp.text().await?; | ||||
|         match content_type { | ||||
|             ContentType::Json => serde_json::from_str(&content).map_err(Error::from), | ||||
|             ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::HealthResponse`"))), | ||||
|             ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::HealthResponse`")))), | ||||
|         } | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<HealthCheckHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,53 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
|  | ||||
| use reqwest; | ||||
| use serde::{Deserialize, Serialize, de::Error as _}; | ||||
| use crate::{apis::ResponseContent, models}; | ||||
| use super::{Error, configuration, ContentType}; | ||||
|  | ||||
|  | ||||
| /// struct for typed errors of method [`serve_website_handler`] | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| #[serde(untagged)] | ||||
| pub enum ServeWebsiteHandlerError { | ||||
|     Status404(models::ResponseError), | ||||
|     Status500(models::ResponseError), | ||||
|     UnknownValue(serde_json::Value), | ||||
| } | ||||
|  | ||||
|  | ||||
| pub async fn serve_website_handler(configuration: &configuration::Configuration, website_hash: &str, path: &str) -> Result<reqwest::Response, Error<ServeWebsiteHandlerError>> { | ||||
|     // add a prefix to parameters to efficiently prevent name collisions | ||||
|     let p_website_hash = website_hash; | ||||
|     let p_path = path; | ||||
|  | ||||
|     let uri_str = format!("{}/api/v1/website/{website_hash}/{path}", configuration.base_path, website_hash=crate::apis::urlencode(p_website_hash), path=crate::apis::urlencode(p_path)); | ||||
|     let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str); | ||||
|  | ||||
|     if let Some(ref user_agent) = configuration.user_agent { | ||||
|         req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone()); | ||||
|     } | ||||
|  | ||||
|     let req = req_builder.build()?; | ||||
|     let resp = configuration.client.execute(req).await?; | ||||
|  | ||||
|     let status = resp.status(); | ||||
|  | ||||
|     if !status.is_client_error() && !status.is_server_error() { | ||||
|         Ok(resp) | ||||
|     } else { | ||||
|         let content = resp.text().await?; | ||||
|         let entity: Option<ServeWebsiteHandlerError> = serde_json::from_str(&content).ok(); | ||||
|         Err(Error::ResponseError(ResponseContent { status, content, entity })) | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,11 +0,0 @@ | ||||
| #![allow(unused_imports)] | ||||
| #![allow(clippy::too_many_arguments)] | ||||
|  | ||||
| extern crate serde_repr; | ||||
| extern crate serde; | ||||
| extern crate serde_json; | ||||
| extern crate url; | ||||
| extern crate reqwest; | ||||
|  | ||||
| pub mod apis; | ||||
| pub mod models; | ||||
| @@ -1,36 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct Block { | ||||
|     #[serde(rename = "data")] | ||||
|     pub data: std::path::PathBuf, | ||||
|     #[serde(rename = "hash")] | ||||
|     pub hash: String, | ||||
|     #[serde(rename = "index")] | ||||
|     pub index: i64, | ||||
|     #[serde(rename = "size")] | ||||
|     pub size: i32, | ||||
| } | ||||
|  | ||||
| impl Block { | ||||
|     pub fn new(data: std::path::PathBuf, hash: String, index: i64, size: i32) -> Block { | ||||
|         Block { | ||||
|             data, | ||||
|             hash, | ||||
|             index, | ||||
|             size, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,38 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| /// BlockDownloadsResponse : Response for block downloads endpoint | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct BlockDownloadsResponse { | ||||
|     /// Block hash | ||||
|     #[serde(rename = "block_hash")] | ||||
|     pub block_hash: String, | ||||
|     /// Size of the block in bytes | ||||
|     #[serde(rename = "block_size")] | ||||
|     pub block_size: i64, | ||||
|     /// Number of times the block has been downloaded | ||||
|     #[serde(rename = "downloads_count")] | ||||
|     pub downloads_count: i64, | ||||
| } | ||||
|  | ||||
| impl BlockDownloadsResponse { | ||||
|     /// Response for block downloads endpoint | ||||
|     pub fn new(block_hash: String, block_size: i64, downloads_count: i64) -> BlockDownloadsResponse { | ||||
|         BlockDownloadsResponse { | ||||
|             block_hash, | ||||
|             block_size, | ||||
|             downloads_count, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,34 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| /// BlockInfo : Block information with hash and index | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct BlockInfo { | ||||
|     /// Block hash | ||||
|     #[serde(rename = "hash")] | ||||
|     pub hash: String, | ||||
|     /// Block index within the file | ||||
|     #[serde(rename = "index")] | ||||
|     pub index: i64, | ||||
| } | ||||
|  | ||||
| impl BlockInfo { | ||||
|     /// Block information with hash and index | ||||
|     pub fn new(hash: String, index: i64) -> BlockInfo { | ||||
|         BlockInfo { | ||||
|             hash, | ||||
|             index, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct BlockUploadedResponse { | ||||
|     #[serde(rename = "hash")] | ||||
|     pub hash: String, | ||||
|     #[serde(rename = "message")] | ||||
|     pub message: String, | ||||
| } | ||||
|  | ||||
| impl BlockUploadedResponse { | ||||
|     pub fn new(hash: String, message: String) -> BlockUploadedResponse { | ||||
|         BlockUploadedResponse { | ||||
|             hash, | ||||
|             message, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| /// BlocksResponse : Response for blocks by hash endpoint | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct BlocksResponse { | ||||
|     /// List of blocks with their indices | ||||
|     #[serde(rename = "blocks")] | ||||
|     pub blocks: Vec<models::BlockInfo>, | ||||
| } | ||||
|  | ||||
| impl BlocksResponse { | ||||
|     /// Response for blocks by hash endpoint | ||||
|     pub fn new(blocks: Vec<models::BlockInfo>) -> BlocksResponse { | ||||
|         BlocksResponse { | ||||
|             blocks, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct DirListTemplate { | ||||
|     #[serde(rename = "cur_path")] | ||||
|     pub cur_path: String, | ||||
|     #[serde(rename = "lister")] | ||||
|     pub lister: Box<models::DirLister>, | ||||
| } | ||||
|  | ||||
| impl DirListTemplate { | ||||
|     pub fn new(cur_path: String, lister: models::DirLister) -> DirListTemplate { | ||||
|         DirListTemplate { | ||||
|             cur_path, | ||||
|             lister: Box::new(lister), | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,27 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct DirLister { | ||||
|     #[serde(rename = "files")] | ||||
|     pub files: Vec<models::FileInfo>, | ||||
| } | ||||
|  | ||||
| impl DirLister { | ||||
|     pub fn new(files: Vec<models::FileInfo>) -> DirLister { | ||||
|         DirLister { | ||||
|             files, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,33 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct ErrorTemplate { | ||||
|     #[serde(rename = "cur_path")] | ||||
|     pub cur_path: String, | ||||
|     #[serde(rename = "err")] | ||||
|     pub err: Box<models::TemplateErr>, | ||||
|     #[serde(rename = "message")] | ||||
|     pub message: String, | ||||
| } | ||||
|  | ||||
| impl ErrorTemplate { | ||||
|     pub fn new(cur_path: String, err: models::TemplateErr, message: String) -> ErrorTemplate { | ||||
|         ErrorTemplate { | ||||
|             cur_path, | ||||
|             err: Box::new(err), | ||||
|             message, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct File { | ||||
|     #[serde(rename = "file_content")] | ||||
|     pub file_content: std::path::PathBuf, | ||||
|     #[serde(rename = "file_hash")] | ||||
|     pub file_hash: String, | ||||
| } | ||||
|  | ||||
| impl File { | ||||
|     pub fn new(file_content: std::path::PathBuf, file_hash: String) -> File { | ||||
|         File { | ||||
|             file_content, | ||||
|             file_hash, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,30 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| /// FileDownloadRequest : Request for file download with custom filename | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct FileDownloadRequest { | ||||
|     /// The custom filename to use for download | ||||
|     #[serde(rename = "file_name")] | ||||
|     pub file_name: String, | ||||
| } | ||||
|  | ||||
| impl FileDownloadRequest { | ||||
|     /// Request for file download with custom filename | ||||
|     pub fn new(file_name: String) -> FileDownloadRequest { | ||||
|         FileDownloadRequest { | ||||
|             file_name, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -1,42 +0,0 @@ | ||||
| /* | ||||
|  * rfs | ||||
|  * | ||||
|  * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) | ||||
|  * | ||||
|  * The version of the OpenAPI document: 0.2.0 | ||||
|  *  | ||||
|  * Generated by: https://openapi-generator.tech | ||||
|  */ | ||||
|  | ||||
| use crate::models; | ||||
| use serde::{Deserialize, Serialize}; | ||||
|  | ||||
| #[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)] | ||||
| pub struct FileInfo { | ||||
|     #[serde(rename = "is_file")] | ||||
|     pub is_file: bool, | ||||
|     #[serde(rename = "last_modified")] | ||||
|     pub last_modified: i64, | ||||
|     #[serde(rename = "name")] | ||||
|     pub name: String, | ||||
|     #[serde(rename = "path_uri")] | ||||
|     pub path_uri: String, | ||||
|     #[serde(rename = "progress")] | ||||
|     pub progress: f32, | ||||
|     #[serde(rename = "size")] | ||||
|     pub size: i64, | ||||
| } | ||||
|  | ||||
| impl FileInfo { | ||||
|     pub fn new(is_file: bool, last_modified: i64, name: String, path_uri: String, progress: f32, size: i64) -> FileInfo { | ||||
|         FileInfo { | ||||
|             is_file, | ||||
|             last_modified, | ||||
|             name, | ||||
|             path_uri, | ||||
|             progress, | ||||
|             size, | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user