1 // Copyright (c) 2023 Huawei Device Co., Ltd. 2 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // you may not use this file except in compliance with the License. 4 // You may obtain a copy of the License at 5 // 6 // http://www.apache.org/licenses/LICENSE-2.0 7 // 8 // Unless required by applicable law or agreed to in writing, software 9 // distributed under the License is distributed on an "AS IS" BASIS, 10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 use std::io; 15 16 use crate::builder::common_builder::impl_common; 17 use crate::builder::CommonBuilder; 18 use crate::executor::current_thread::CurrentThreadSpawner; 19 use crate::executor::{AsyncHandle, Runtime}; 20 21 /// RuntimeBuilder struct with current_thread settings. 22 pub struct CurrentThreadBuilder { 23 pub(crate) common: CommonBuilder, 24 } 25 26 impl CurrentThreadBuilder { new() -> Self27 pub(crate) fn new() -> Self { 28 CurrentThreadBuilder { 29 common: CommonBuilder::new(), 30 } 31 } 32 33 /// Initializes the runtime and returns its instance. build(&mut self) -> io::Result<Runtime>34 pub fn build(&mut self) -> io::Result<Runtime> { 35 let async_spawner = CurrentThreadSpawner::new(); 36 Ok(Runtime { 37 async_spawner: AsyncHandle::CurrentThread(async_spawner), 38 }) 39 } 40 } 41 42 impl_common!(CurrentThreadBuilder); 43