pub struct UpsertProfileFields {
pub name: Patch<Box<str>>,
pub typ: Patch<ProfileType>,
pub profile_pic: Patch<Option<Box<str>>>,
pub roles: Patch<Option<Vec<Box<str>>>>,
pub status: Patch<ProfileStatus>,
pub synced: Patch<bool>,
pub following: Patch<bool>,
pub connected: Patch<ProfileConnectionStatus>,
pub trust: Patch<ProfileTrust>,
pub etag: Patch<Box<str>>,
}Expand description
Fields for MetaAdapter::upsert_profile.
All fields are Patch and apply to both INSERT and UPDATE:
Patch::Value(v)/Patch::Null→ set the column on both branches.Patch::Undefined→ leave the column at its current value on UPDATE, and use the column default (NULL or""forname) on INSERT.
Note on the INSERT branch: Patch::Null and Patch::Undefined
collapse to the same column default for most fields — the INSERT can’t
distinguish “user explicitly set to NULL” from “user didn’t touch this
field.” This is fine semantically (both mean “no value here”), but
differs from UPDATE, which preserves the existing value on Undefined.
Stub-row idiom: upsert_profile creates a row with type = NULL
when typ is Patch::Undefined. These stub rows are filtered out of
list_profiles (which requires type IS NOT NULL), but read_profile /
get_info will return Error::NotFound for them. This is intentional:
relationship hooks (FOLLOW, FSHR) create stubs first and federation sync
populates type later. Callers performing read-then-write should not
rely on read_profile finding a freshly-inserted stub.
Fields§
§name: Patch<Box<str>>§typ: Patch<ProfileType>§profile_pic: Patch<Option<Box<str>>>§roles: Patch<Option<Vec<Box<str>>>>§status: Patch<ProfileStatus>§synced: Patch<bool>§following: Patch<bool>§connected: Patch<ProfileConnectionStatus>§trust: Patch<ProfileTrust>§etag: Patch<Box<str>>Implementations§
Source§impl UpsertProfileFields
impl UpsertProfileFields
Sourcepub fn from_update(update: UpdateProfileData) -> Self
pub fn from_update(update: UpdateProfileData) -> Self
Build an UpsertProfileFields from an existing UpdateProfileData.
typ is left Undefined — callers that know the profile type should
set it explicitly.