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 \"{}\"",
34 delimiter
35 ));
36 }
37
38 if value.contains(delimiter) {
39 return Err(format!(
40 "Unexpected input: value should not contain the delimiter \"{}\"",
41 delimiter
42 ));
43 }
44
45 Ok(format!(
46 "{}<<{}{}{}{}{}",
47 key.as_ref(),
48 delimiter,
49 crate::EOL,
50 value,
51 crate::EOL,
52 delimiter
53 ))
54}