about summary refs log tree commit diff
path: root/LibMatrix/StructuredData
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2025-08-16 00:17:33 +0200
committerRory& <root@rory.gay>2025-08-16 00:17:33 +0200
commitc660b3e620de241c1158d08edaf0a99028364977 (patch)
tree24ba7d20f7dcbed30fb6adbd9bcc969205db4807 /LibMatrix/StructuredData
parentRoom builder/upgrade fixes (diff)
downloadLibMatrix-c660b3e620de241c1158d08edaf0a99028364977.tar.xz
Some cleanup, further room builder work
Diffstat (limited to '')
-rw-r--r--LibMatrix/StructuredData/MxcUri.cs (renamed from LibMatrix/MxcUri.cs)2
-rw-r--r--LibMatrix/StructuredData/UserId.cs27
2 files changed, 28 insertions, 1 deletions
diff --git a/LibMatrix/MxcUri.cs b/LibMatrix/StructuredData/MxcUri.cs

index 875ae53..82a9677 100644 --- a/LibMatrix/MxcUri.cs +++ b/LibMatrix/StructuredData/MxcUri.cs
@@ -1,6 +1,6 @@ using System.Diagnostics.CodeAnalysis; -namespace LibMatrix; +namespace LibMatrix.StructuredData; public class MxcUri { public required string ServerName { get; set; } diff --git a/LibMatrix/StructuredData/UserId.cs b/LibMatrix/StructuredData/UserId.cs new file mode 100644
index 0000000..02b2e91 --- /dev/null +++ b/LibMatrix/StructuredData/UserId.cs
@@ -0,0 +1,27 @@ +namespace LibMatrix.StructuredData; + +public class UserId { + public required string ServerName { get; set; } + public required string LocalPart { get; set; } + + public static UserId Parse(string mxid) { + if (!mxid.StartsWith('@')) throw new ArgumentException("Matrix User IDs must start with '@'", nameof(mxid)); + var parts = mxid.Split(':', 2); + if (parts.Length != 2) throw new ArgumentException($"Invalid MXID '{mxid}' passed! MXIDs must exist of only 2 parts!", nameof(mxid)); + return new UserId { + LocalPart = parts[0][1..], + ServerName = parts[1] + }; + } + + public static implicit operator UserId(string mxid) => Parse(mxid); + public static implicit operator string(UserId mxid) => $"@{mxid.LocalPart}:{mxid.ServerName}"; + public static implicit operator (string, string)(UserId mxid) => (mxid.LocalPart, mxid.ServerName); + public static implicit operator UserId((string localPart, string serverName) mxid) => (mxid.localPart, mxid.serverName); + // public override string ToString() => $"mxc://{ServerName}/{MediaId}"; + + public void Deconstruct(out string serverName, out string localPart) { + serverName = ServerName; + localPart = LocalPart; + } +} \ No newline at end of file