fn generate_error_type_matchers(
        &self,
        operation_name: &str,
        operation: &Operation,
        service: &Service<'_>,
    ) -> String {
        let mut type_matchers: Vec<String> = Vec::new();
        let error_type = error_type_name(service, operation_name);

        if operation.errors.is_some() {
            for error in operation.errors() {
                let shape = service.get_shape(&error.shape).unwrap();
                let error_code = shape
                    .error
                    .as_ref()
                    .and_then(|http_error| http_error.code.as_ref())
                    .unwrap_or(&error.shape);
                type_matchers.push(format!("\"{error_code}\" => return RusotoError::Service({error_type}::{error_name}(parsed_error.message))",
                    error_code = error_code,
                    error_type = error_type,
                    error_name = error.idiomatic_error_name()))
            }
        }

        type_matchers.push("_ => {}".to_string());
        type_matchers.join(",")
    }
generate the arms for a match expression that maps an error name string from the response XML
to a concrete error type from this operation's errors enum
service_crategen/src/commands/generate/codegen/error_types.rs