private static Validation <BaseError, Parameters> ValidateUrl(AddTraktList request)
    {
        const string PATTERN = @"(?:https:\/\/trakt\.tv\/users\/)?([\w\-_]+)\/(?:lists\/)?([\w\-_]+)";
        Match        match   = Regex.Match(request.TraktListUrl, PATTERN);

        if (match.Success)
        {
            string user = match.Groups[1].Value;
            string list = match.Groups[2].Value;
            return(new Parameters(user, list));
        }

        return(BaseError.New("Invalid Trakt list url"));
    }
 public async Task <Either <BaseError, Unit> > Handle(AddTraktList request, CancellationToken cancellationToken)
 {
     try
     {
         Validation <BaseError, Parameters> validation = ValidateUrl(request);
         return(await validation.Match(
                    DoAdd,
                    error => Task.FromResult <Either <BaseError, Unit> >(error.Join())));
     }
     finally
     {
         _entityLocker.UnlockTrakt();
     }
 }