Explore this module further in the Mover Registry: @sage/shared
Structs
Member
Data that represents a single member of a larger organization.
public struct Member has store
count: u64,
created_at: u64,
is_following: bool,
member_type: u8,
updated_at: u64
Membership
Table of individual members of an organization.
public struct Membership has store
current_followers: u64,
membership: sui::table::Table<address, Member>
Constants
Represents a wallet address.
Represents an object address.
Represents a member addition.
const MEMBER_ADD: u8 = 10;
Represents a member removal.
const MEMBER_REMOVE: u8 = 11;
Error code when an address is already a member of an organization.
const EIsMember: u64 = 370;
Error code when an address is not a member of an organization.
const EIsNotMember: u64 = 371;
Functions
assert_is_member
Aborts with EIsNotMember
if the address is not a member.
public fun assert_is_member(membership: &Membership, member_address: address)
public fun assert_is_member(
membership: &Membership,
member_address: address
) {
let is_member = is_member(
membership,
member_address
);
assert!(is_member, EIsNotMember);
}
create
Creates a new Membership
instance.
public fun create(ctx: &mut TxContext): Membership
public fun create(
ctx: &mut TxContext
): Membership {
let membership = Membership {
current_followers: 0,
membership: table::new(ctx)
};
membership
}
get_count
Get number of times the Member
has joined the Membership
.
public fun get_count(membership: &Membership, member_address: address): u64
public fun get_count(
membership: &Membership,
member_address: address
): u64 {
membership.membership[member_address].count
}
get_created_at
Get timestamp of when the Member
first joined.
public fun get_created_at(membership: &Membership, member_address: address): u64
public fun get_created_at(
membership: &Membership,
member_address: address
): u64 {
membership.membership[member_address].created_at
}
get_member_length
Get the number of current Member
s.
public fun get_member_length(membership: &Membership): u64
public fun get_member_length(
membership: &Membership
): u64 {
membership.current_followers
}
get_type
Get whether the Member
is an object or a wallet.
public fun get_type(membership: &Membership, member_address: address): u8
public fun get_type(
membership: &Membership,
member_address: address
): u8 {
membership.membership[member_address].member_type
}
get_updated_at
Get timestamp of when the Membership
was most recently updated.
public fun get_updated_at(membership: &Membership, member_address: address): u64
public fun get_updated_at(
membership: &Membership,
member_address: address
): u64 {
membership.membership[member_address].updated_at
}
is_member
Returns true or false depending on whether the address is a Member
.
public fun is_member(membership: &Membership, member_address: address): bool
public fun is_member(
membership: &Membership,
member_address: address
): bool {
membership.membership.contains(member_address) &&
membership.membership[member_address].is_following
}
object_join
Join a Membership
as an object.
public fun object_join(membership: &mut Membership, obj_address: address, timestamp: u64): (u8, u8, u64)
public fun object_join(
membership: &mut Membership,
obj_address: address,
timestamp: u64
): (u8, u8, u64) {
let count = join(
membership,
obj_address,
OBJECT,
timestamp
);
(MEMBER_ADD, OBJECT, count)
}
object_leave
Leave a Membership
as an object.
public fun object_leave(membership: &mut Membership, obj_address: address, timestamp: u64): (u8, u8, u64)
public fun object_leave(
membership: &mut Membership,
obj_address: address,
timestamp: u64
): (u8, u8, u64) {
let count = leave(
membership,
obj_address,
timestamp
);
(MEMBER_REMOVE, OBJECT, count)
}
wallet_join
Join a Membership
as a wallet.
public fun wallet_join(membership: &mut Membership, user_address: address, timestamp: u64 ): (u8, u8, u64)
public fun wallet_join(
membership: &mut Membership,
user_address: address,
timestamp: u64
): (u8, u8, u64) {
let count = join(
membership,
user_address,
WALLET,
timestamp
);
(MEMBER_ADD, WALLET, count)
}
wallet_leave
Leave a Membership
as a wallet.
public fun wallet_leave(membership: &mut Membership, user_address: address, timestamp: u64 ): (u8, u8, u64)
public fun wallet_leave(
membership: &mut Membership,
user_address: address,
timestamp: u64
): (u8, u8, u64) {
let count = leave(
membership,
user_address,
timestamp
);
(MEMBER_REMOVE, WALLET, count)
}