ferrin_spec/dynamic/
skills.rs1use super::BoxFuture;
4use super::ServiceRef;
5use super::model_ref::ref_conversions;
6use crate::error::ProviderError;
7use crate::shared::ProviderId;
8use crate::skills::Skills;
9use crate::skills::UploadSkillOptions;
10use crate::skills::UploadSkillResult;
11
12pub trait DynSkills: Send + Sync + 'static {
14 fn provider(&self) -> &ProviderId;
16 fn upload_skill(
18 &self,
19 options: UploadSkillOptions,
20 ) -> BoxFuture<'_, Result<UploadSkillResult, ProviderError>>;
21}
22
23impl<T: Skills> DynSkills for T {
24 fn provider(&self) -> &ProviderId {
25 Skills::provider(self)
26 }
27
28 fn upload_skill(
29 &self,
30 options: UploadSkillOptions,
31 ) -> BoxFuture<'_, Result<UploadSkillResult, ProviderError>> {
32 Box::pin(Skills::upload_skill(self, options))
33 }
34}
35
36pub type SkillsRef = ServiceRef<dyn DynSkills>;
38
39ref_conversions!(SkillsRef, Skills, DynSkills);