Compare commits
	
		
			4 Commits
		
	
	
		
			developmen
			...
			main-rfs-c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 5014c2f4a5 | ||
|  | ba6f53a28a | ||
|  | b81a0aa61c | ||
|  | b02101bd42 | 
| @@ -11,17 +11,18 @@ categories = ["os", "filesystem", "api-bindings"] | |||||||
| readme = "README.md" | readme = "README.md" | ||||||
|  |  | ||||||
| [workspace] | [workspace] | ||||||
| members = [".", "vault", "git", "redisclient", "mycelium", "text", "os", "net", "zinit_client", "process", "virt", "postgresclient", "rhai", "herodo"] | members = [".", "vault", "git", "redisclient", "mycelium", "text", "os", "net", "zinit_client", "process", "virt", "postgresclient", "rhai", "herodo", "rfs-client"] | ||||||
| resolver = "2" | resolver = "2" | ||||||
|  |  | ||||||
| [workspace.metadata] | [workspace.metadata] | ||||||
| # Workspace-level metadata | # Workspace-level metadata | ||||||
| rust-version = "1.70.0" | rust-version = "1.85.0" | ||||||
|  |  | ||||||
| [workspace.dependencies] | [workspace.dependencies] | ||||||
| # Core shared dependencies with consistent versions | # Core shared dependencies with consistent versions | ||||||
| anyhow = "1.0.98" | anyhow = "1.0.98" | ||||||
| base64 = "0.22.1" | base64 = "0.22.1" | ||||||
|  | bytes = "1.4.0" | ||||||
| dirs = "6.0.0" | dirs = "6.0.0" | ||||||
| env_logger = "0.11.8" | env_logger = "0.11.8" | ||||||
| futures = "0.3.30" | futures = "0.3.30" | ||||||
| @@ -84,3 +85,4 @@ sal-virt = { path = "virt" } | |||||||
| sal-postgresclient = { path = "postgresclient" } | sal-postgresclient = { path = "postgresclient" } | ||||||
| sal-vault = { path = "vault" } | sal-vault = { path = "vault" } | ||||||
| sal-rhai = { path = "rhai" } | sal-rhai = { path = "rhai" } | ||||||
|  | sal-rfs-client = { path = "rfs-client" } | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								rfs-client/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								rfs-client/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | |||||||
|  | /target/ | ||||||
|  | **/*.rs.bk | ||||||
							
								
								
									
										26
									
								
								rfs-client/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								rfs-client/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | [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" | ||||||
							
								
								
									
										195
									
								
								rfs-client/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										195
									
								
								rfs-client/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,195 @@ | |||||||
|  | # 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 | ||||||
							
								
								
									
										42
									
								
								rfs-client/examples/authentication.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								rfs-client/examples/authentication.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | 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(()) | ||||||
|  | } | ||||||
							
								
								
									
										128
									
								
								rfs-client/examples/block_management.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								rfs-client/examples/block_management.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,128 @@ | |||||||
|  | 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(()) | ||||||
|  | } | ||||||
							
								
								
									
										64
									
								
								rfs-client/examples/file_management.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								rfs-client/examples/file_management.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | 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(()) | ||||||
|  | } | ||||||
							
								
								
									
										170
									
								
								rfs-client/examples/flist_operations.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								rfs-client/examples/flist_operations.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,170 @@ | |||||||
|  | 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(()) | ||||||
|  | } | ||||||
							
								
								
									
										61
									
								
								rfs-client/examples/wait_for_flist.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								rfs-client/examples/wait_for_flist.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | |||||||
|  | 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(()) | ||||||
|  | } | ||||||
							
								
								
									
										1
									
								
								rfs-client/openapi.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								rfs-client/openapi.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										3
									
								
								rfs-client/openapi/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								rfs-client/openapi/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | /target/ | ||||||
|  | **/*.rs.bk | ||||||
|  | Cargo.lock | ||||||
							
								
								
									
										23
									
								
								rfs-client/openapi/.openapi-generator-ignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								rfs-client/openapi/.openapi-generator-ignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | # 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 | ||||||
							
								
								
									
										125
									
								
								rfs-client/openapi/.openapi-generator/FILES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								rfs-client/openapi/.openapi-generator/FILES
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | |||||||
|  | .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
									
								
								rfs-client/openapi/.openapi-generator/VERSION
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								rfs-client/openapi/.openapi-generator/VERSION
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | 7.13.0 | ||||||
							
								
								
									
										1
									
								
								rfs-client/openapi/.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								rfs-client/openapi/.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | language: rust | ||||||
							
								
								
									
										15
									
								
								rfs-client/openapi/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								rfs-client/openapi/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | [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"] } | ||||||
							
								
								
									
										114
									
								
								rfs-client/openapi/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								rfs-client/openapi/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | |||||||
|  | # 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 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										37
									
								
								rfs-client/openapi/docs/AuthenticationApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								rfs-client/openapi/docs/AuthenticationApi.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | # \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) | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								rfs-client/openapi/docs/Block.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								rfs-client/openapi/docs/Block.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								rfs-client/openapi/docs/BlockDownloadsResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								rfs-client/openapi/docs/BlockDownloadsResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/BlockInfo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/BlockInfo.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										250
									
								
								rfs-client/openapi/docs/BlockManagementApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								rfs-client/openapi/docs/BlockManagementApi.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,250 @@ | |||||||
|  | # \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) | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/BlockUploadedResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/BlockUploadedResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/BlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/BlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/DirListTemplate.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/DirListTemplate.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/DirLister.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/DirLister.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								rfs-client/openapi/docs/ErrorTemplate.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								rfs-client/openapi/docs/ErrorTemplate.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/File.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/File.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/FileDownloadRequest.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/FileDownloadRequest.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								rfs-client/openapi/docs/FileInfo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								rfs-client/openapi/docs/FileInfo.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										71
									
								
								rfs-client/openapi/docs/FileManagementApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								rfs-client/openapi/docs/FileManagementApi.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,71 @@ | |||||||
|  | # \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) | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/FileUploadResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/FileUploadResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										18
									
								
								rfs-client/openapi/docs/FlistBody.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								rfs-client/openapi/docs/FlistBody.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										150
									
								
								rfs-client/openapi/docs/FlistManagementApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								rfs-client/openapi/docs/FlistManagementApi.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,150 @@ | |||||||
|  | # \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) | ||||||
|  |  | ||||||
							
								
								
									
										37
									
								
								rfs-client/openapi/docs/FlistServingApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								rfs-client/openapi/docs/FlistServingApi.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | # \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) | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								rfs-client/openapi/docs/FlistState.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								rfs-client/openapi/docs/FlistState.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/FlistStateAccepted.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/FlistStateAccepted.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/FlistStateCreated.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/FlistStateCreated.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/FlistStateInProgress.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/FlistStateInProgress.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/FlistStateInfo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/FlistStateInfo.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/FlistStateResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/FlistStateResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/FlistStateStarted.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/FlistStateStarted.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/HealthResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/HealthResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/Job.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/Job.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/ListBlocksParams.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/ListBlocksParams.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								rfs-client/openapi/docs/ListBlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								rfs-client/openapi/docs/ListBlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								rfs-client/openapi/docs/PreviewResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								rfs-client/openapi/docs/PreviewResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								rfs-client/openapi/docs/ResponseError.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								rfs-client/openapi/docs/ResponseError.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorBadRequest.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorBadRequest.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorConflict.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorConflict.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorForbidden.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorForbidden.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorNotFound.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorNotFound.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorTemplateError.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorTemplateError.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorUnauthorized.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseErrorUnauthorized.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										20
									
								
								rfs-client/openapi/docs/ResponseResult.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								rfs-client/openapi/docs/ResponseResult.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultBlockUploaded.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultBlockUploaded.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultDirTemplate.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultDirTemplate.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFileUploaded.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFileUploaded.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFlistCreated.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFlistCreated.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFlistState.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFlistState.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFlists.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultFlists.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultPreviewFlist.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultPreviewFlist.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultRes.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultRes.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultSignedIn.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/ResponseResultSignedIn.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/SignInBody.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/SignInBody.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/SignInResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/SignInResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										34
									
								
								rfs-client/openapi/docs/SystemApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								rfs-client/openapi/docs/SystemApi.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | # \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) | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								rfs-client/openapi/docs/TemplateErr.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								rfs-client/openapi/docs/TemplateErr.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/TemplateErrBadRequest.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/TemplateErrBadRequest.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/TemplateErrInternalServerError.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/TemplateErrInternalServerError.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/TemplateErrNotFound.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/TemplateErrNotFound.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/UploadBlockParams.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/UploadBlockParams.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								rfs-client/openapi/docs/UserBlockInfo.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								rfs-client/openapi/docs/UserBlockInfo.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								rfs-client/openapi/docs/UserBlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								rfs-client/openapi/docs/UserBlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										13
									
								
								rfs-client/openapi/docs/VerifyBlock.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								rfs-client/openapi/docs/VerifyBlock.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/VerifyBlocksRequest.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/VerifyBlocksRequest.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/docs/VerifyBlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/docs/VerifyBlocksResponse.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # 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) | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										38
									
								
								rfs-client/openapi/docs/WebsiteServingApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								rfs-client/openapi/docs/WebsiteServingApi.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | # \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) | ||||||
|  |  | ||||||
							
								
								
									
										57
									
								
								rfs-client/openapi/git_push.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								rfs-client/openapi/git_push.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | |||||||
|  | #!/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' | ||||||
							
								
								
									
										64
									
								
								rfs-client/openapi/src/apis/authentication_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								rfs-client/openapi/src/apis/authentication_api.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,64 @@ | |||||||
|  | /* | ||||||
|  |  * 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 })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										385
									
								
								rfs-client/openapi/src/apis/block_management_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										385
									
								
								rfs-client/openapi/src/apis/block_management_api.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,385 @@ | |||||||
|  | /* | ||||||
|  |  * 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 })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										51
									
								
								rfs-client/openapi/src/apis/configuration.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								rfs-client/openapi/src/apis/configuration.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										106
									
								
								rfs-client/openapi/src/apis/file_management_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								rfs-client/openapi/src/apis/file_management_api.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | |||||||
|  | /* | ||||||
|  |  * 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 })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										244
									
								
								rfs-client/openapi/src/apis/flist_management_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										244
									
								
								rfs-client/openapi/src/apis/flist_management_api.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,244 @@ | |||||||
|  | /* | ||||||
|  |  * 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 })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								rfs-client/openapi/src/apis/flist_serving_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								rfs-client/openapi/src/apis/flist_serving_api.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,63 @@ | |||||||
|  | /* | ||||||
|  |  * 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 })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										121
									
								
								rfs-client/openapi/src/apis/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										121
									
								
								rfs-client/openapi/src/apis/mod.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,121 @@ | |||||||
|  | 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; | ||||||
							
								
								
									
										59
									
								
								rfs-client/openapi/src/apis/system_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								rfs-client/openapi/src/apis/system_api.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | |||||||
|  | /* | ||||||
|  |  * 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 })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										53
									
								
								rfs-client/openapi/src/apis/website_serving_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								rfs-client/openapi/src/apis/website_serving_api.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | /* | ||||||
|  |  * 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 })) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										11
									
								
								rfs-client/openapi/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rfs-client/openapi/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | #![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; | ||||||
							
								
								
									
										36
									
								
								rfs-client/openapi/src/models/block.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								rfs-client/openapi/src/models/block.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										38
									
								
								rfs-client/openapi/src/models/block_downloads_response.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								rfs-client/openapi/src/models/block_downloads_response.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										34
									
								
								rfs-client/openapi/src/models/block_info.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								rfs-client/openapi/src/models/block_info.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								rfs-client/openapi/src/models/block_uploaded_response.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								rfs-client/openapi/src/models/block_uploaded_response.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								rfs-client/openapi/src/models/blocks_response.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								rfs-client/openapi/src/models/blocks_response.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								rfs-client/openapi/src/models/dir_list_template.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								rfs-client/openapi/src/models/dir_list_template.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* | ||||||
|  |  * 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), | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								rfs-client/openapi/src/models/dir_lister.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								rfs-client/openapi/src/models/dir_lister.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										33
									
								
								rfs-client/openapi/src/models/error_template.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								rfs-client/openapi/src/models/error_template.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								rfs-client/openapi/src/models/file.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								rfs-client/openapi/src/models/file.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										30
									
								
								rfs-client/openapi/src/models/file_download_request.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								rfs-client/openapi/src/models/file_download_request.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | /* | ||||||
|  |  * 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, | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
							
								
								
									
										42
									
								
								rfs-client/openapi/src/models/file_info.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								rfs-client/openapi/src/models/file_info.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | |||||||
|  | /* | ||||||
|  |  * 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