# Module Ftp_client.Action

    module Action: sig .. end

    type plan

    type action = plan -> unit

    val ftp_state : plan -> Ftp_client.ftp_state

Returns the ftp_state at the beginning of the plan

    val execute : onreply:(Ftp_client.ftp_state -> Ftp_client.reply -> unit) ->
           onerror:(Ftp_client.ftp_state -> Ftp_client.reply -> unit) ->
           Ftp_client.ftp_client_pi -> action -> unit

Executes the action for the given client PI. If the normal execution path is taken, finally `onreply` is called once. If the error execution path is taken, finally `onerror` is called once.

    val empty : action

Do nothing

    val command : Ftp_client.cmd -> action

Execute the command

    val dyn_command : (unit -> Ftp_client.cmd) -> action

Execute the computed command

    val seq2 : action ->
           action -> action

Do the two actions in turn

    val full_seq2 : action ->
           (Ftp_client.reply -> action) -> action

Do the first action, then get the second action using the reply of the first action.

    val seq : action list -> action

Do the list of actions in turn

    val expect : Ftp_client.cmd_state -> action -> action

If the execution of the action yields the passed state, continue normally, otherwise treat the situation as error

    val seq2_case : action ->
           (Ftp_client.cmd_state * action) list ->
           action

Do the first action, then check the resulting command state. The matching second action is executed. If no second action matches, the situation is treated as error