// Path: robusto-core/src/main/java/com/homeadvisor/robusto/CommandContext.java
// public interface CommandContext
// {
//    /**
//     * Get the logical name.
//     * @return Logical command name.
//     */
//    String getCommandName();
// 
//    /**
//     * Looks up the value associated with the given key from the attributes.
//     * @param key Key to lookup in command data map.
//     * @return Value associated with the given key, or null if none was set.
//     */
//    Object getCommandAttribute(String key);
// 
//    /**
//     * Sets the given key/value pair for the underlying command attributes. Will
//     * overwrite existing key if it exists.
//     * @param key Key name to use.
//     * @param val Value to associate with the key.
//     */
//    void setCommandAttribute(String key, Object val);
// 
//    /**
//     * Removes the given key, if it exists, from the underlying command attributes.
//     * This is a no-op if the key doesn't exist.
//     * @param key Key to remove.
//     */
//    void removeCommandAttribute(String key);
// }


import com.homeadvisor.robusto.CommandContext;
import org.springframework.web.client.RestTemplate;
package com.homeadvisor.robusto.spring;


@FunctionalInterface
public interface RestTemplateInvoker<T>
{
// Path: robusto-core/src/main/java/com/homeadvisor/robusto/CommandContext.java
// public interface CommandContext
// {
//    /**
//     * Get the logical name.
//     * @return Logical command name.
//     */
//    String getCommandName();
// 
//    /**
//     * Looks up the value associated with the given key from the attributes.
//     * @param key Key to lookup in command data map.
//     * @return Value associated with the given key, or null if none was set.
//     */
//    Object getCommandAttribute(String key);
// 
//    /**
//     * Sets the given key/value pair for the underlying command attributes. Will
//     * overwrite existing key if it exists.
//     * @param key Key name to use.
//     * @param val Value to associate with the key.
//     */
//    void setCommandAttribute(String key, Object val);
// 
//    /**
//     * Removes the given key, if it exists, from the underlying command attributes.
//     * This is a no-op if the key doesn't exist.
//     * @param key Key to remove.
//     */
//    void removeCommandAttribute(String key);
// }


// Path: robusto-spring/src/main/java/com/homeadvisor/robusto/spring/RestTemplateInvoker.java
import com.homeadvisor.robusto.CommandContext;
import org.springframework.web.client.RestTemplate;

package com.homeadvisor.robusto.spring;


@FunctionalInterface
public interface RestTemplateInvoker<T>
{
   T run(CommandContext ctx, RestTemplate restTemplate, String url);