diff --git a/client/binding_approval.go b/client/binding_approval.go new file mode 100644 index 0000000..29e6f19 --- /dev/null +++ b/client/binding_approval.go @@ -0,0 +1,27 @@ +package client + +import "github.com/meshcloud/meshstack-cli/client/types/enum" + +type MeshBindingApproval string + +var ( + MeshBindingApprovals = enum.Enum[MeshBindingApproval]{} + MeshBindingApprovalAssigned = MeshBindingApprovals.Entry("ASSIGNED") + MeshBindingApprovalPending = MeshBindingApprovals.Entry("PENDING") +) + +type MeshGroupBindingStatus struct { + Approval *enum.Entry[MeshBindingApproval] `json:"approval,omitempty" tfsdk:"approval"` +} + +func (s *MeshGroupBindingStatus) WaitsForApproval() bool { + return s != nil && isPending(s.Approval) +} + +func (s *MeshUserBindingStatus) WaitsForApproval() bool { + return s != nil && isPending(s.Approval) +} + +func isPending(approval *enum.Entry[MeshBindingApproval]) bool { + return approval != nil && *approval == MeshBindingApprovalPending +} diff --git a/client/project_group_binding.go b/client/project_group_binding.go index f0f2d27..5920412 100644 --- a/client/project_group_binding.go +++ b/client/project_group_binding.go @@ -9,6 +9,8 @@ import ( type MeshProjectGroupBinding struct { MeshProjectBinding + + Status *MeshGroupBindingStatus `json:"status,omitempty" tfsdk:"status"` } type MeshProjectGroupBindingClient interface { diff --git a/client/project_user_binding.go b/client/project_user_binding.go index bf13217..af3c233 100644 --- a/client/project_user_binding.go +++ b/client/project_user_binding.go @@ -4,6 +4,7 @@ import ( "context" "github.com/meshcloud/meshstack-cli/client/internal" + "github.com/meshcloud/meshstack-cli/client/types/enum" "github.com/meshcloud/meshstack-cli/internal/http" ) @@ -14,7 +15,8 @@ type MeshProjectUserBinding struct { } type MeshUserBindingStatus struct { - UserDisabled bool `json:"userDisabled" tfsdk:"user_disabled"` + UserDisabled bool `json:"userDisabled" tfsdk:"user_disabled"` + Approval *enum.Entry[MeshBindingApproval] `json:"approval,omitempty" tfsdk:"approval"` } type MeshProjectUserBindingClient interface { diff --git a/client/workspace_group_binding.go b/client/workspace_group_binding.go index 4c4da9c..d2e4bc5 100644 --- a/client/workspace_group_binding.go +++ b/client/workspace_group_binding.go @@ -9,6 +9,8 @@ import ( type MeshWorkspaceGroupBinding struct { MeshWorkspaceBinding + + Status *MeshGroupBindingStatus `json:"status,omitempty" tfsdk:"status"` } type MeshWorkspaceGroupBindingClient interface {