use serde::{Deserialize, Serialize};
use super::{ArgumentSource, SourceLocation};
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ExecutionSurface {
pub commands: Vec<CommandInvocation>,
pub file_operations: Vec<FileOperation>,
pub network_operations: Vec<NetworkOperation>,
pub env_accesses: Vec<EnvAccess>,
pub dynamic_exec: Vec<DynamicExec>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CommandInvocation {
pub function: String,
pub command_arg: ArgumentSource,
pub location: SourceLocation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileOperation {
pub operation: FileOpType,
pub path_arg: ArgumentSource,
pub location: SourceLocation,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FileOpType {
Read,
Write,
Delete,
List,
Chmod,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NetworkOperation {
pub function: String,
pub url_arg: ArgumentSource,
pub method: Option<String>,
pub sends_data: bool,
pub location: SourceLocation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnvAccess {
pub var_name: ArgumentSource,
pub is_sensitive: bool,
pub location: SourceLocation,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DynamicExec {
pub function: String,
pub code_arg: ArgumentSource,
pub location: SourceLocation,
}