public type User = {
userID: Principal;
userName: Text;
userType: UserType;
userFollowers: Nat;
userFollowing: Nat;
userAvatarURL: Text;
userBackgroundURL: Text;
userTwitterURL: Text;
userEmailURL: Text;
lastLoginTime: Int;
};
public shared({ caller }) func setUserName( userName: Text): () {
let userInfo : ?T.User = userToData.get(caller);
switch(userInfo) {
case (null) {};
case (?userInfo) {
// userInfo.userName := userName;
let s: T.User = {
userID = userInfo.userID;
userName = userName;
userType = userInfo.userType;
userFollowers = userInfo.userFollowers;
userFollowing = userInfo.userFollowing;
userAvatarURL = userInfo.userAvatarURL;
userBackgroundURL = userInfo.userBackgroundURL;
userTwitterURL = userInfo.userTwitterURL;
userEmailURL = userInfo.userEmailURL;
lastLoginTime = userInfo.lastLoginTime;
};
userToData.put(caller,s);
};
};
};
In this case “expected mutable assignment target” occurs if the commented out part “userInfo.userName := userNamet]” is used
But if I set “type User userName” to “var” it will solve this problem but it will trigger another problem “shared function has non-shared parameter type”
Do we have another way to update "userInfo.userName " using simple writing?