xref: /aosp_15_r20/tools/netsim/rust/cli/src/file_handler.rs (revision cf78ab8cffb8fc9207af348f23af247fb04370a6)
1*cf78ab8cSAndroid Build Coastguard Worker // Copyright 2022 Google LLC
2*cf78ab8cSAndroid Build Coastguard Worker //
3*cf78ab8cSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License");
4*cf78ab8cSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License.
5*cf78ab8cSAndroid Build Coastguard Worker // You may obtain a copy of the License at
6*cf78ab8cSAndroid Build Coastguard Worker //
7*cf78ab8cSAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*cf78ab8cSAndroid Build Coastguard Worker //
9*cf78ab8cSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*cf78ab8cSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS,
11*cf78ab8cSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*cf78ab8cSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and
13*cf78ab8cSAndroid Build Coastguard Worker // limitations under the License.
14*cf78ab8cSAndroid Build Coastguard Worker 
15*cf78ab8cSAndroid Build Coastguard Worker use crate::ffi::ClientResponseReadable;
16*cf78ab8cSAndroid Build Coastguard Worker use std::fs::File;
17*cf78ab8cSAndroid Build Coastguard Worker /// Implements handler for pcap operations
18*cf78ab8cSAndroid Build Coastguard Worker use std::io::Write;
19*cf78ab8cSAndroid Build Coastguard Worker use std::path::PathBuf;
20*cf78ab8cSAndroid Build Coastguard Worker use tracing::error;
21*cf78ab8cSAndroid Build Coastguard Worker 
22*cf78ab8cSAndroid Build Coastguard Worker pub struct FileHandler {
23*cf78ab8cSAndroid Build Coastguard Worker     pub file: File,
24*cf78ab8cSAndroid Build Coastguard Worker     pub path: PathBuf,
25*cf78ab8cSAndroid Build Coastguard Worker }
26*cf78ab8cSAndroid Build Coastguard Worker 
27*cf78ab8cSAndroid Build Coastguard Worker impl ClientResponseReadable for FileHandler {
28*cf78ab8cSAndroid Build Coastguard Worker     // function to handle writing each chunk to file
handle_chunk(&self, chunk: &[u8])29*cf78ab8cSAndroid Build Coastguard Worker     fn handle_chunk(&self, chunk: &[u8]) {
30*cf78ab8cSAndroid Build Coastguard Worker         (&self.file)
31*cf78ab8cSAndroid Build Coastguard Worker             .write_all(chunk)
32*cf78ab8cSAndroid Build Coastguard Worker             .unwrap_or_else(|_| panic!("Unable to write to file: {}", self.path.display()));
33*cf78ab8cSAndroid Build Coastguard Worker     }
34*cf78ab8cSAndroid Build Coastguard Worker     // function to handle error response
handle_error(&self, error_code: u32, error_message: &str)35*cf78ab8cSAndroid Build Coastguard Worker     fn handle_error(&self, error_code: u32, error_message: &str) {
36*cf78ab8cSAndroid Build Coastguard Worker         error!(
37*cf78ab8cSAndroid Build Coastguard Worker             "Handling error code: {}, msg: {}, on file: {}",
38*cf78ab8cSAndroid Build Coastguard Worker             error_code,
39*cf78ab8cSAndroid Build Coastguard Worker             error_message,
40*cf78ab8cSAndroid Build Coastguard Worker             self.path.display()
41*cf78ab8cSAndroid Build Coastguard Worker         );
42*cf78ab8cSAndroid Build Coastguard Worker     }
43*cf78ab8cSAndroid Build Coastguard Worker }
44