1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// This file is part of context-coroutine. It is subject to the license terms in the COPYRIGHT file found in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-coroutine/master/COPYRIGHT. No part of context-coroutine, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the COPYRIGHT file.
// Copyright © 2019 The developers of context-coroutine. See the COPYRIGHT file in the top-level directory of this distribution and at https://raw.githubusercontent.com/lemonrock/context-coroutine/master/COPYRIGHT.


/// Holds a stack and a type-safe transfer of a started coroutine; suitable for the ultimate owner of a coroutine.
///
/// On drop the the closure is killed and the stack is then relinquished.
///
/// To create an instance of this struct, use `Coroutine::start_coroutine()`.
pub struct StartedCoroutineInstance<S: Stack, C: Coroutine>
{
	owns: CoroutineInstance<S, C>,
}

impl<S: Stack, C: Coroutine> StartedCoroutineInstance<S, C>
{
	/// Resumes.
	///
	/// Returns the data transferred to us after the resume (`WouldLikeToResume`) or the final result (`Complete`).
	///
	/// If the coroutine panicked, this panics.
	#[inline(always)]
	pub fn resume(&mut self, arguments: C::ResumeArguments) -> ResumeOutcome<C>
	{
		self.owns.resume_drop_safe(arguments)
	}
}