using System.Collections.Generic; using FluentValidation; using MfGames.Gallium; using Zio; namespace MfGames.Nitride.IO.Paths; /// /// An operation that removes a path prefix from the input. /// [WithProperties] public partial class RemovePathPrefix : IOperation { private readonly ReplacePath replacePath; private readonly IValidator validator; public RemovePathPrefix( IValidator validator, ReplacePath replacePath) { this.validator = validator; this.replacePath = replacePath; } /// /// Gets or sets the prefix for the path operations. /// public UPath PathPrefix { get; set; } public IEnumerable Run(IEnumerable input) { this.validator.ValidateAndThrow(this); return this.replacePath.WithReplacement(this.RunReplacement) .Run(input); } private UPath RunReplacement( Entity _, UPath path) { string normalized = path.ToString(); string prefix = this.PathPrefix.ToString()!; if (normalized.StartsWith(prefix)) { return (UPath)path.ToString() .Substring(prefix.Length); } return path; } }