about summary refs log tree commit diff
path: root/IrcTokens/Line.cs
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2020-04-20 17:24:59 -0400
committerBen Harris <ben@tilde.team>2020-04-20 17:24:59 -0400
commit6a3bfd314d87bed96611d24440b0961a06bf7e91 (patch)
tree5652d9ab48d850b7c9bd905b49b6d2709ae849c8 /IrcTokens/Line.cs
parent616abc70303990fbf8096fc6ada5fac100a6c66a (diff)
stateful in progress
Diffstat (limited to 'IrcTokens/Line.cs')
-rw-r--r--IrcTokens/Line.cs24
1 files changed, 16 insertions, 8 deletions
diff --git a/IrcTokens/Line.cs b/IrcTokens/Line.cs
index 7592376..6198c04 100644
--- a/IrcTokens/Line.cs
+++ b/IrcTokens/Line.cs
@@ -15,10 +15,20 @@ namespace IrcTokens
         public List<string> Params { get; set; }
 
         private Hostmask _hostmask;
-        private string _rawLine;
+        private readonly string _rawLine;
 
-        public override string ToString() => 
-            $"Line(tags={string.Join(";", Tags.Select(kvp => $"{kvp.Key}={kvp.Value}"))}, params={string.Join(",", Params)})";
+        public override string ToString() =>
+            $"Line(source={Source}, command={Command}, tags={string.Join(";", Tags.Select(kvp => $"{kvp.Key}={kvp.Value}"))}, params={string.Join(",", Params)})";
+
+        public override int GetHashCode() => Format().GetHashCode();
+
+        public override bool Equals(object obj)
+        {
+            if (obj == null || GetType() != obj.GetType())
+                return false;
+
+            return Format() == ((Line) obj).Format();
+        }
 
         public Hostmask Hostmask =>
             _hostmask ??= new Hostmask(Source);
@@ -108,9 +118,7 @@ namespace IrcTokens
             }
 
             if (Source != null)
-            {
                 outs.Add($":{Source}");
-            }
 
             outs.Add(Command);
 
@@ -122,13 +130,13 @@ namespace IrcTokens
                 foreach (var p in Params)
                 {
                     if (p.Contains(' '))
-                        throw new ArgumentException("non-last parameters cannot have spaces");
+                        throw new ArgumentException("non-last parameters cannot have spaces", p);
                     if (p.StartsWith(':'))
-                        throw new ArgumentException("non-last parameters cannot start with colon");
+                        throw new ArgumentException("non-last parameters cannot start with colon", p);
                 }
                 outs.AddRange(Params);
 
-                if (last == null || string.IsNullOrWhiteSpace(last) || last.Contains(' ') || last.StartsWith(':'))
+                if (string.IsNullOrWhiteSpace(last) || last.Contains(' ') || last.StartsWith(':'))
                     last = $":{last}";
                 outs.Add(last);
             }