ephemeris_forge_github/api/model/
collaborator.rs1use ephemeris_forge::{Observed, UserName};
2use facet::Facet;
3
4use super::team::PermissionFlags;
5use crate::Permission;
6
7#[derive(Clone, Debug, Eq, PartialEq)]
9pub struct Collaborator {
10 pub user: UserName,
12 pub permission: Observed<Permission>,
14}
15
16#[derive(Clone, Debug, Eq, PartialEq)]
18pub struct Invitation {
19 pub id: u64,
21 pub user: UserName,
23 pub permission: Observed<Permission>,
25}
26
27#[derive(Clone, Copy, Debug, Eq, Facet, PartialEq)]
29#[repr(u8)]
30pub enum OwnerKind {
31 #[facet(rename = "Organization")]
33 Organization,
34 #[facet(rename = "User")]
36 User,
37}
38
39#[derive(Facet)]
41pub(crate) struct CollaboratorResponse {
42 login: String,
43 #[facet(default)]
44 role_name: String,
45 #[facet(default)]
46 permissions: Option<PermissionFlags>,
47}
48
49#[derive(Facet)]
50pub(crate) struct Invitee {
51 login: String,
52}
53
54#[derive(Facet)]
56pub(crate) struct InvitationResponse {
57 id: u64,
58 #[facet(default)]
59 invitee: Option<Invitee>,
60 #[facet(default)]
61 permissions: String,
62}
63
64#[derive(Facet)]
66pub(crate) struct OwnerResponse {
67 #[facet(rename = "type")]
68 pub(crate) kind: OwnerKind,
69}
70
71impl CollaboratorResponse {
72 pub(crate) fn into_collaborator(self) -> Option<Collaborator> {
73 Some(Collaborator {
74 user: UserName::try_from(self.login).ok()?,
75 permission: Permission::from_role_name(&self.role_name).map_or_else(
76 || {
77 Permission::observe(
78 "",
79 self.permissions.as_ref().and_then(PermissionFlags::highest),
80 )
81 },
82 Observed::Known,
83 ),
84 })
85 }
86}
87
88impl InvitationResponse {
89 pub(crate) fn into_invitation(self) -> Option<Invitation> {
90 Some(Invitation {
91 id: self.id,
92 user: UserName::try_from(self.invitee?.login).ok()?,
93 permission: Permission::observe(&self.permissions, None),
94 })
95 }
96}