MCPcopy Create free account
hub / github.com/bytecodealliance/wit-bindgen / handle_result_call

Method handle_result_call

crates/csharp/src/function.rs:297–391  ·  view source on GitHub ↗
(
        &mut self,
        func: &&wit_parser::Function,
        target: String,
        func_name: String,
        oper: String,
        use_await: bool,
    )

Source from the content-addressed store, hash-verified

295 }
296
297 fn handle_result_call(
298 &mut self,
299 func: &&wit_parser::Function,
300 target: String,
301 func_name: String,
302 oper: String,
303 use_await: bool,
304 ) -> String {
305 let ret = self.locals.tmp("ret");
306 if self.interface_gen.csharp_gen.opts.with_wit_results {
307 uwriteln!(self.src, "var {ret} = {target}.{func_name}({oper});");
308 return ret;
309 }
310
311 // otherwise generate exception code
312 let ty = self
313 .interface_gen
314 .type_name_with_qualifier(&func.result.unwrap(), true);
315 let is_async = InterfaceGenerator::is_async(&func.kind);
316
317 if is_async && !use_await {
318 uwriteln!(self.src, "Task<{ty}> {ret};");
319 } else {
320 uwriteln!(self.src, "{ty} {ret};");
321 }
322 let mut cases = Vec::with_capacity(self.results.len());
323 let mut oks = Vec::with_capacity(self.results.len());
324 let mut payload_is_void = false;
325 for (index, ty) in self.results.iter().enumerate() {
326 let TypeDefKind::Result(result) = &self.interface_gen.resolve.types[*ty].kind else {
327 unreachable!();
328 };
329 let err_ty = if let Some(ty) = result.err {
330 self.interface_gen.type_name_with_qualifier(&ty, true)
331 } else {
332 "None".to_owned()
333 };
334 let ty = self
335 .interface_gen
336 .type_name_with_qualifier(&Type::Id(*ty), true);
337 let head = oks.concat();
338 let tail = oks.iter().map(|_| ")").collect::<Vec<_>>().concat();
339 cases.push(format!(
340 "\
341 case {index}:
342 {{
343 ret = {head}{ty}.Err(({err_ty}) e.Value){tail};
344 break;
345 }}
346 "
347 ));
348 oks.push(format!("{ty}.Ok("));
349 payload_is_void = result.ok.is_none();
350 }
351 if !self.results.is_empty() {
352 self.src.push_str(
353 "
354 try

Callers 1

emitMethod · 0.80

Calls 9

concatMethod · 0.80
mapMethod · 0.80
joinMethod · 0.80
tmpMethod · 0.45
iterMethod · 0.45
pushMethod · 0.45
is_emptyMethod · 0.45
push_strMethod · 0.45

Tested by

no test coverage detected