From 6a3bfd314d87bed96611d24440b0961a06bf7e91 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Mon, 20 Apr 2020 17:24:59 -0400 Subject: stateful in progress --- IrcTokens/Line.cs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'IrcTokens/Line.cs') 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 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); } -- cgit 1.4.1