github_actions/
file_command.rs1use std::env;
2use std::fmt;
3use std::fs::OpenOptions;
4use std::io::{self, Write};
5
6#[derive(Debug)]
7pub enum FileCommandError {
8 VarError(env::VarError),
9 FileError(io::Error),
10}
11
12pub fn issue_file_command(env: &str, message: &str) -> Result<(), FileCommandError> {
13 let file = env::var(env).map_err(FileCommandError::VarError)?;
14
15 let mut file = OpenOptions::new()
16 .append(true)
17 .open(file)
18 .map_err(FileCommandError::FileError)?;
19
20 writeln!(file, "{message}").map_err(FileCommandError::FileError)?;
21 Ok(())
22}
23
24pub fn prepare_key_value_message<K, V>(key: K, value: V, delimiter: &str) -> Result<String, String>
25where
26 K: AsRef<str>,
27 V: fmt::Display,
28{
29 let value = value.to_string();
30
31 if key.as_ref().contains(delimiter) {
32 return Err(format!(
33 "Unexpected input: key should not contain the delimiter \"{delimiter}\""
34 ));
35 }
36
37 if value.contains(delimiter) {
38 return Err(format!(
39 "Unexpected input: value should not contain the delimiter \"{delimiter}\""
40 ));
41 }
42
43 Ok(format!(
44 "{}<<{}{}{}{}{}",
45 key.as_ref(),
46 delimiter,
47 crate::EOL,
48 value,
49 crate::EOL,
50 delimiter
51 ))
52}