use super::*;
#[derive(Debug)]
pub struct Oneway {}
impl Oneway {
pub fn parse_from(Unparsed { directive, args }: &Unparsed, span: &Span, diagnostics: &mut Diagnostics) -> Self {
debug_assert_eq!(directive, Self::directive());
check_that_no_arguments_were_provided(args, Self::directive(), span, diagnostics);
Oneway {}
}
pub fn validate_on(&self, applied_on: Attributables, span: &Span, diagnostics: &mut Diagnostics) {
if let Attributables::Operation(operation) = applied_on {
if !operation.return_type.is_empty() || !operation.exception_specification.is_empty() {
let note = "operations that return or throw data cannot be marked oneway";
report_unexpected_attribute(self, span, Some(note), diagnostics);
}
} else {
let note = "the oneway attribute can only be applied to operations";
report_unexpected_attribute(self, span, Some(note), diagnostics);
}
}
}
implement_attribute_kind_for!(Oneway, "oneway", false);