namespace Nadeko.Common; public delegate TOut PipeFunc(in TIn a); public delegate TOut PipeFunc(in TIn1 a, in TIn2 b); public static class PipeExtensions { public static TOut Pipe(this TIn a, Func fn) => fn(a); public static TOut Pipe(this TIn a, PipeFunc fn) => fn(a); public static TOut Pipe(this (TIn1, TIn2) a, PipeFunc fn) => fn(a.Item1, a.Item2); public static (TIn, TExtra) With(this TIn a, TExtra b) => (a, b); public static async Task Pipe(this Task a, Func fn) => fn(await a); }