2022-10-31 15:19:56 +01:00
|
|
|
@0xf8f8864ba0678056;
|
|
|
|
|
|
|
|
using CSharp = import "programming_language/csharp.capnp";
|
|
|
|
$CSharp.namespace("FabAccessAPI.Schema");
|
|
|
|
|
2024-03-27 19:43:37 +01:00
|
|
|
# TODO: removed SturdyRef to build API in C#
|
|
|
|
# using import "/capnp/rpc.capnp".SturdyRef;
|
|
|
|
# using import "persistent.capnp".Persistent;
|
2022-10-31 15:19:56 +01:00
|
|
|
|
2023-11-23 12:36:28 +01:00
|
|
|
using import "resource.capnp".Resource;
|
|
|
|
using import "notify.capnp".Notifiable;
|
|
|
|
using import "utils.capnp".Fallible;
|
|
|
|
using import "utils.capnp".OID;
|
|
|
|
using import "utils.capnp".Map;
|
2024-04-15 16:28:23 +02:00
|
|
|
using import "projects.capnp".Project;
|
2022-10-31 15:19:56 +01:00
|
|
|
|
2022-11-01 12:11:53 +01:00
|
|
|
interface Claimable {
|
2024-04-15 16:28:23 +02:00
|
|
|
claim @0 ( project :Project ) -> Fallible(Claim, ClaimError);
|
2024-03-30 19:20:42 +01:00
|
|
|
# Returns NULL if the resource is *currently* not claimable.
|
|
|
|
# Disown the returned claim capability to unclaim it.
|
2023-11-23 12:36:28 +01:00
|
|
|
|
2024-04-15 16:28:23 +02:00
|
|
|
struct ClaimError {
|
|
|
|
union {
|
|
|
|
locked @0 :Text;
|
|
|
|
}
|
2023-11-23 12:36:28 +01:00
|
|
|
}
|
2022-10-31 15:19:56 +01:00
|
|
|
}
|
|
|
|
|
2022-11-01 12:11:53 +01:00
|
|
|
interface Lockable {
|
2024-03-27 19:43:37 +01:00
|
|
|
restore @0 ( ) -> ( lock :Lock );
|
|
|
|
# TODO: removed SturdyRef to build API in C#
|
|
|
|
# restore @0 ( sturdy :SturdyRef ) -> ( lock :Lock );
|
2023-11-23 12:36:28 +01:00
|
|
|
# Restore a previously saved SturdyRef pointing to a Lock
|
2022-11-01 12:11:53 +01:00
|
|
|
|
2024-04-15 16:28:23 +02:00
|
|
|
lock @1 ( message :Text ) -> ( lock :Lock );
|
2024-03-01 15:39:30 +01:00
|
|
|
# Take exclusive access to a resource, disowning all other claims on this
|
|
|
|
# resource.
|
2022-11-01 12:11:53 +01:00
|
|
|
#
|
2024-03-01 15:39:30 +01:00
|
|
|
# On resources that do not allow concurrent claims to exist this method
|
|
|
|
# behaves similar to `claim`, however it will also succeed if a resource is
|
|
|
|
# already claimed, disowning the previous claim. On resources that do
|
|
|
|
# allow concurrent claims this method will disown all current claims on a
|
|
|
|
# resource and prevent new claims from being granted until the returned
|
|
|
|
# Lock capability is dropped. A call to `lock` on a resource that is
|
|
|
|
# already locked will succeed, invalidating the former lock.
|
2022-11-01 12:11:53 +01:00
|
|
|
}
|
|
|
|
|
2023-11-23 12:36:28 +01:00
|
|
|
interface Claim extends (Notifiable) {
|
2024-03-27 19:43:37 +01:00
|
|
|
resource @0 () -> ( resource :Resource, dummy :UInt8 = 0 );
|
2023-11-23 12:36:28 +01:00
|
|
|
# Pointer back to the resource this claim comes from. Primarily useful when restoring persisted
|
|
|
|
# claims or restoring after a connection failure.
|
2022-11-01 11:54:01 +01:00
|
|
|
|
2023-11-23 12:36:28 +01:00
|
|
|
traits @1 () -> Map(OID, AnyPointer);
|
|
|
|
|
2024-04-15 16:28:23 +02:00
|
|
|
disown @2 () -> Fallible(Void, Error(Void));
|
|
|
|
# Disown this claim TODO define ConstraintViolation type -> Dependencies!
|
|
|
|
|
|
|
|
makeTransferable @3 () -> Fallible(SturdyRef, Error(Void));
|
|
|
|
makeLendable @4 () -> Fallible(( token :Sturdyref, returnToken :Interest ), Error(Void));
|
|
|
|
# TODO: should returnToken be an Interest instead?
|
2022-10-31 15:19:56 +01:00
|
|
|
}
|
2022-11-01 12:11:53 +01:00
|
|
|
|
|
|
|
interface Lock extends (Claim) {
|
|
|
|
# An exclusive claim on a resource. Only a single Lock may exist for any given resource.
|
|
|
|
|
|
|
|
downgrade @0 () -> ( claim :Claim );
|
|
|
|
# Downgrade a lock to a claim, allowing additional claims to be granted on resources that allow
|
2022-11-01 12:44:33 +01:00
|
|
|
# for concurrent access. Calling this capability will invalidate the Lock capability.
|
2022-11-01 12:11:53 +01:00
|
|
|
}
|