use anyhow::{anyhow, Result}; use aws_sdk_autoscaling as autoscaling; use aws_sdk_autoscaling::types::AutoScalingGroup; use crate::single::Single; pub trait AutoScaling { fn autoscaling(&self) -> &autoscaling::Client; } pub async fn asg_by_name(aws_context: &C, name: &str) -> Result where C: AutoScaling, { let asg_resp = aws_context .autoscaling() .describe_auto_scaling_groups() .auto_scaling_group_names(name) .send() .await?; let auto_scaling_groups = asg_resp.auto_scaling_groups().unwrap_or(&[]); let auto_scaling_group = auto_scaling_groups .iter() .map(ToOwned::to_owned) .single() .ok_or(anyhow!( "No unique autoscaling group found with name: {}", name ))?; Ok(auto_scaling_group) }