// Path: halfpipe-example-service/src/main/java/halfpipe/example/properties/ExampleServiceProps.java
// @Component
// @ArchaiusProperties("hello")
// @Data
// public class ExampleServiceProps {
// 
//     private DynaProp<String> defaultMessage = prop("HelloWorld");
// 
//     private DynaProp<Integer> myNumber = prop(1);
// 
//     private DynaProp<List<String>> myThings = prop(newArrayList("z", "y"));
// 
//     private DynaProp<String> user = prop("test");
// 
//     private DynaProp<String> password = prop("test123");
// }
// 
// Path: halfpipe-properties/src/main/java/halfpipe/properties/AbstractCallback.java
// @Data
// public abstract class AbstractCallback<C, V> implements Runnable {
//     protected C properties;
//     protected DynaProp<V> prop;
// 
//     //@Log TODO: avoiding circular dependency
//     protected Logger logger = LoggerFactory.getLogger(this.getClass());
// }


import halfpipe.example.properties.ExampleServiceProps;
import halfpipe.properties.AbstractCallback;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
package halfpipe.example;


@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = ExampleServiceApp.class)
public class ExampleServiceApp {

// Path: halfpipe-example-service/src/main/java/halfpipe/example/properties/ExampleServiceProps.java
// @Component
// @ArchaiusProperties("hello")
// @Data
// public class ExampleServiceProps {
// 
//     private DynaProp<String> defaultMessage = prop("HelloWorld");
// 
//     private DynaProp<Integer> myNumber = prop(1);
// 
//     private DynaProp<List<String>> myThings = prop(newArrayList("z", "y"));
// 
//     private DynaProp<String> user = prop("test");
// 
//     private DynaProp<String> password = prop("test123");
// }
// 
// Path: halfpipe-properties/src/main/java/halfpipe/properties/AbstractCallback.java
// @Data
// public abstract class AbstractCallback<C, V> implements Runnable {
//     protected C properties;
//     protected DynaProp<V> prop;
// 
//     //@Log TODO: avoiding circular dependency
//     protected Logger logger = LoggerFactory.getLogger(this.getClass());
// }


// Path: halfpipe-example-service/src/main/java/halfpipe/example/ExampleServiceApp.java
import halfpipe.example.properties.ExampleServiceProps;
import halfpipe.properties.AbstractCallback;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

package halfpipe.example;


@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackageClasses = ExampleServiceApp.class)
public class ExampleServiceApp {

    @Bean(name = "hello.callback")