MCPcopy Create free account
hub / github.com/PowerShell/DSC / invoke

Method invoke

lib/dsc-lib/src/functions/data_uri_to_string.rs:31–127  ·  view source on GitHub ↗
(&self, args: &[Value], _context: &Context)

Source from the content-addressed store, hash-verified

29 }
30
31 fn invoke(&self, args: &[Value], _context: &Context) -> Result<Value, DscError> {
32 debug!("{}", t!("functions.dataUriToString.invoked"));
33
34 let data_uri = args[0].as_str().unwrap();
35
36 if !data_uri.starts_with("data:") {
37 return Err(DscError::FunctionArg(
38 "dataUriToString".to_string(),
39 t!("functions.dataUriToString.invalidDataUri").to_string(),
40 ));
41 }
42
43 // Find the base64 marker and extract the encoded content
44 // Format: data:[<mediatype>][;base64],<data>
45 let Some(comma_pos) = data_uri.find(',') else {
46 return Err(DscError::FunctionArg(
47 "dataUriToString".to_string(),
48 t!("functions.dataUriToString.invalidDataUri").to_string(),
49 ));
50 };
51
52 let metadata = &data_uri[5..comma_pos]; // Skip "data:"
53 let encoded_data = &data_uri[comma_pos + 1..];
54 let parts: Vec<&str> = metadata.split(';').collect();
55
56 let mediatype = parts[0];
57 if mediatype.contains('=') || mediatype.starts_with(':') {
58 return Err(DscError::FunctionArg(
59 "dataUriToString".to_string(),
60 t!("functions.dataUriToString.invalidDataUri").to_string(),
61 ));
62 }
63
64 if parts.len() > 1 && parts[1..].iter().any(|p| p.is_empty()) {
65 return Err(DscError::FunctionArg(
66 "dataUriToString".to_string(),
67 t!("functions.dataUriToString.invalidDataUri").to_string(),
68 ));
69 }
70
71 // Validate remaining parts: must be either "base64" or "charset=value"
72 let mut has_base64 = false;
73 let mut charset = None;
74
75 for part in &parts[1..] {
76 if *part == "base64" {
77 has_base64 = true;
78 } else if let Some(charset_from_part) = part.strip_prefix("charset=") {
79 if charset.is_some() {
80 return Err(DscError::FunctionArg(
81 "dataUriToString".to_string(),
82 t!("functions.dataUriToString.invalidDataUri").to_string(),
83 ));
84 }
85 charset = Some(charset_from_part);
86 } else {
87 return Err(DscError::FunctionArg(
88 "dataUriToString".to_string(),

Callers

nothing calls this directly

Calls 3

FunctionArgEnum · 0.85
as_strMethod · 0.80
is_emptyMethod · 0.45

Tested by

no test coverage detected