/*
 * @author Ranides Atterwim <ranides@gmail.com>
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/assira.drafts
 */
package net.ranides.assira.reflection;

import java.util.Map;
import java.util.Optional;
import net.ranides.assira.reflection.impl.WSInpsector;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
public interface WSModel {
    
    static WSModel typeinfo(Class<?> type) {
        return typeinfo(IClass.typeinfo(type));
    }
    
    static WSModel typeinfo(IClass<?> type) {
        return WSInpsector.resolve(type);
    }
    
    static WSModel typefor(Object object) {
        return typeinfo(IClass.typefor(object));
    }
    
    IClass<?> type();
    
    Optional<WSMethod> method(String name);
    
    Map<String, WSMethod> methods();
    
    String name();

    String port();

    String service();

    String namespace();

    String location();

}
