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;
}
}