grp_core/common/repos/
create.rs1use crate::animation::Animation;
2use crate::common::structs::{Context, Repo, RequestType};
3use crate::config::Config;
4use crate::error::structs::Error;
5use crate::platform::Platform;
6
7
8impl Platform {
9 pub async fn create_repo<T: Into<String>, A: Animation + ?Sized>(&self,
22 owner: Option<T>,
23 repo: Repo,
24 config: &Config,
25 animation: &Box<A>
26 ) -> Result<Repo, Error> {
27 let owner = owner.map(|o| o.into());
28 let owner = owner.unwrap_or(config.user.clone());
29
30 animation.change_message("getting user type");
31 let user_type = self.get_user_type(&owner, &config).await?;
32
33 animation.change_message("Serializing repository...");
34 let json = repo.as_json(&self);
35
36 animation.change_message("creating repository...");
37 let url = self.url_create_repo(&user_type, &config.endpoint).await;
38 let result = self.post(url, true, config, &json).await?;
39
40 let context = Context {
41 request_type: RequestType::Create,
42 owner: Some(user_type.get_user().name),
43 repo: Some(repo.name), additional: None,
44 };
45
46 let base_message = "Failed to create repository";
47 let reponse = self.unwrap(result, base_message, &config, context).await?;
48
49 Repo::from_text(&reponse, &self)
50 }
51}