using System; namespace PluralKit.Core { public enum MemberPrivacySubject { Visibility, Name, Description, Avatar, Birthday, Pronouns, Metadata } public static class MemberPrivacyUtils { public static MemberPatch WithPrivacy(this MemberPatch member, MemberPrivacySubject subject, PrivacyLevel level) { // what do you mean switch expressions can't be statements >.> _ = subject switch { MemberPrivacySubject.Name => member.NamePrivacy = level, MemberPrivacySubject.Description => member.DescriptionPrivacy = level, MemberPrivacySubject.Avatar => member.AvatarPrivacy = level, MemberPrivacySubject.Pronouns => member.PronounPrivacy = level, MemberPrivacySubject.Birthday => member.BirthdayPrivacy = level, MemberPrivacySubject.Metadata => member.MetadataPrivacy = level, MemberPrivacySubject.Visibility => member.Visibility = level, _ => throw new ArgumentOutOfRangeException($"Unknown privacy subject {subject}") }; return member; } public static MemberPatch WithAllPrivacy(this MemberPatch member, PrivacyLevel level) { foreach (var subject in Enum.GetValues(typeof(MemberPrivacySubject))) member.WithPrivacy((MemberPrivacySubject) subject, level); return member; } public static bool TryParseMemberPrivacy(string input, out MemberPrivacySubject subject) { switch (input.ToLowerInvariant()) { case "name": subject = MemberPrivacySubject.Name; break; case "description": case "desc": case "text": case "info": subject = MemberPrivacySubject.Description; break; case "avatar": case "pfp": case "pic": case "icon": subject = MemberPrivacySubject.Avatar; break; case "birthday": case "birth": case "bday": case "birthdate": case "bdate": subject = MemberPrivacySubject.Birthday; break; case "pronouns": case "pronoun": subject = MemberPrivacySubject.Pronouns; break; case "meta": case "metadata": case "created": subject = MemberPrivacySubject.Metadata; break; case "visibility": case "hidden": case "shown": case "visible": case "list": subject = MemberPrivacySubject.Visibility; break; default: subject = MemberPrivacySubject.Name; return false; } return true; } } }