Skip to content

Instantly share code, notes, and snippets.

View naturalwarren's full-sized avatar
🎯
Focusing

Warren Smith naturalwarren

🎯
Focusing
  • Waterloo Canada
View GitHub Profile
interface TradierApi {
@Enveloped
@GET("markets/lookup")
fun lookup(@Query("q") symbol: String): Single<Securities>
}
/**
* Complements @Enveloped by performing custom deserialization
* for a response that is wrapped in a JSON Object.
*/
internal class EnvelopeFactory : JsonAdapter.Factory {
companion object {
val INSTANCE = EnvelopeFactory()
}
override fun create(
/**
* Indicates an endpoint wraps a response in a JSON Object.
* When deserializing the response we should only return
* what's inside the outer most object.
*/
@Retention(RUNTIME)
@JsonQualifier
@Target(FUNCTION, CLASS)
internal annotation class Enveloped
{
"securities":{
"security":[
{
"symbol":"PHYS",
"exchange":"Q",
"type":"stock",
"description":"Sprott Physical Gold Trust ETV"
}
]
apply plugin: ‘com.android.application’
dependencies {
implementation deps.support.appcompat
implementation deps.retrofit.core
implementation deps.retrofit.adapter.rxjava2
implementation deps.retrofit.converter.moshi
}
def versions = [ retrofit: ‘2.4.0', support: '27.1.1']
def retrofit = [
adapter: [ rxjava2: "com.squareup.retrofit2:adapter-rxjava2:${versions.retrofit}" ],
converter: [ moshi: "com.squareup.retrofit2:converter-moshi:${versions.retrofit}" ],
core: "com.squareup.retrofit2:retrofit:${versions.retrofit}"
]
def support = [
appcompat: "com.android.support:appcompat-v7:${versions.support}",
public final class RaveValidatorFactory_Generated_Validator extends BaseValidator {
RaveValidatorFactory_Generated_Validator() {
addSupportedClass(MyModel.class);
registerSelf();
}
@Override
protected void validateAs(@NonNull Object object, @NonNull Class<?> clazz, @NonNull ExclusionStrategy exclusionStrategy) throws InvalidModelException {
if (!clazz.isInstance(object)) {
throw new IllegalArgumentException(object.getClass().getCanonicalName() + "is not of type" + clazz.getCanonicalName());
@naturalwarren
naturalwarren / RaveValidatorFactory.java
Created May 26, 2017 17:03
Example usage of RAVE.
/**
* A factory class capable of creating a validator whose implementation generated at annotation processing time.
*/
public final class RaveValidatorFactory implements ValidatorFactory {
@NonNull
@Override
public BaseValidator generateValidator() {
return new RaveValidatorFactory_Generated_Validator();
}
@naturalwarren
naturalwarren / UsingRave.java
Created May 26, 2017 17:03
Example usage of RAVE.
public class UsingRave {
public static void main(String[] args) {
MyModel myModel = new MyModel(“Validate me please!”);
Rave.validate(myModel);
}
}
@naturalwarren
naturalwarren / ExampleModel.java
Created May 26, 2017 17:02
An example model with RAVE validation.
@Validated(factory = RaveValidatorFactory.class)
public class MyModel {
@NonNull private String someString;
public MyModel(@NonNull String someString) {
this.someString = someString;
}
@NonNull