001package com.streamconverter.command.rule;
002
003/**
004 * ルールインターフェース
005 *
006 * <p>このインターフェースは、ストリーム変換のルールを定義するためのものです。 具体的なルールはこのインターフェースを実装するクラスで定義されます。
007 * ルールは、ストリーム変換の際に適用される条件や処理を定義します。
008 *
009 * <p>このインターフェースは関数型インターフェースです。ラムダ式やメソッド参照で実装できます。
010 *
011 * <p>使用例:
012 *
013 * <pre>{@code
014 * // 単純な変換ルール
015 * IRule upperCaseRule = input -> input.toUpperCase();
016 * IRule trimRule = String::trim;
017 *
018 * // 複合ルール(トリムして大文字に変換)
019 * IRule trimAndUpperCase = input -> input.trim().toUpperCase();
020 *
021 * // StreamConverterコマンドでの使用例
022 * IRule dataCleaningRule = input -> input.trim().replaceAll("\\s+", " ");
023 * JsonNavigateCommand command = JsonNavigateCommand.create(
024 *     TreePath.fromJson("$.user.name"),
025 *     dataCleaningRule
026 * );
027 * }</pre>
028 */
029@FunctionalInterface
030public interface IRule {
031
032  /**
033   * ルールの適用を実行します。
034   *
035   * <p>このメソッドは、ストリーム変換の際にルールを適用するために使用されます。 具体的なルールの実装は、このメソッドをオーバーライドして定義します。
036   * 変換対象とする箇所を特定したあとにこのメソッドを呼び出すことを想定しています。
037   *
038   * @param input 変換対象の文字列
039   * @return String output 変換結果を格納する文字列
040   */
041  String apply(String input);
042}