about summary refs log tree commit diff
path: root/IrcTokens/Line.cs
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2020-04-22 16:28:51 -0400
committerBen Harris <ben@tilde.team>2020-04-22 16:28:51 -0400
commit933a4f85604e21445c9bac8272d64cf3e6f65e00 (patch)
tree5b300ca37beff5cf11ed67a8b6e3550d24cf18a3 /IrcTokens/Line.cs
parent338763fde71ba2dc0de8ea5e2437d24ee365874b (diff)
rename to IrcSharp
also tidy up formatting with vs tools
Diffstat (limited to 'IrcTokens/Line.cs')
-rw-r--r--IrcTokens/Line.cs47
1 files changed, 39 insertions, 8 deletions
diff --git a/IrcTokens/Line.cs b/IrcTokens/Line.cs
index 9056097..24efe4a 100644
--- a/IrcTokens/Line.cs
+++ b/IrcTokens/Line.cs
@@ -8,7 +8,7 @@ namespace IrcTokens
     /// <summary>
     /// Tools to represent, parse, and format IRC lines
     /// </summary>
-    public class Line
+    public class Line : IEquatable<Line>
     {
         public Dictionary<string, string> Tags { get; set; }
         public string Source { get; set; }
@@ -16,32 +16,52 @@ namespace IrcTokens
         public List<string> Params { get; set; }
 
         private Hostmask _hostmask;
-        private readonly string _rawLine;
 
         public override string ToString()
         {
             var vars = new List<string>();
 
             if (Command != null)
+            {
                 vars.Add($"command={Command}");
+            }
+
             if (Source != null)
+            {
                 vars.Add($"source={Source}");
+            }
+
             if (Params != null && Params.Any())
+            {
                 vars.Add($"params=[{string.Join(",", Params)}]");
+            }
+
             if (Tags != null && Tags.Any())
+            {
                 vars.Add($"tags=[{string.Join(";", Tags.Select(kvp => $"{kvp.Key}={kvp.Value}"))}]");
+            }
 
             return $"Line({string.Join(", ", vars)})";
         }
 
-        public override int GetHashCode() => Format().GetHashCode(StringComparison.Ordinal);
+        public override int GetHashCode()
+        {
+            return Format().GetHashCode(StringComparison.Ordinal);
+        }
 
-        public override bool Equals(object obj)
+        public bool Equals(Line other)
         {
-            if (obj == null || GetType() != obj.GetType())
+            if (other == null)
+            {
                 return false;
+            }
 
-            return Format() == ((Line) obj).Format();
+            return Format() == other.Format();
+        }
+
+        public override bool Equals(object obj)
+        {
+            return Equals(obj as Line);
         }
 
         public Hostmask Hostmask =>
@@ -56,9 +76,10 @@ namespace IrcTokens
         public Line(string line)
         {
             if (string.IsNullOrWhiteSpace(line))
+            {
                 throw new ArgumentNullException(nameof(line));
+            }
 
-            _rawLine = line;
             string[] split;
 
             if (line.StartsWith('@'))
@@ -97,7 +118,7 @@ namespace IrcTokens
 
             Params = line.Contains(' ', StringComparison.Ordinal)
                 ? line.Split(' ', StringSplitOptions.RemoveEmptyEntries).ToList()
-                : new List<string> {line};
+                : new List<string> { line };
 
             if (Params[0].StartsWith(':'))
             {
@@ -135,7 +156,9 @@ namespace IrcTokens
             }
 
             if (Source != null)
+            {
                 outs.Add($":{Source}");
+            }
 
             outs.Add(Command);
 
@@ -147,14 +170,22 @@ namespace IrcTokens
                 foreach (var p in Params)
                 {
                     if (p.Contains(' ', StringComparison.Ordinal))
+                    {
                         throw new ArgumentException(@"non-last parameters cannot have spaces", p);
+                    }
+
                     if (p.StartsWith(':'))
+                    {
                         throw new ArgumentException(@"non-last parameters cannot start with colon", p);
+                    }
                 }
                 outs.AddRange(Params);
 
                 if (string.IsNullOrWhiteSpace(last) || last.Contains(' ', StringComparison.Ordinal) || last.StartsWith(':'))
+                {
                     last = $":{last}";
+                }
+
                 outs.Add(last);
             }