001package net.gdface.thrift; 002 003import static com.google.common.base.Preconditions.*; 004import static net.gdface.thrift.ThriftyStructMetadata.STRUCTS_CACHE; 005 006import java.util.Map; 007import com.facebook.swift.codec.metadata.ThriftStructMetadata; 008import com.google.common.base.Function; 009import com.microsoft.thrifty.Struct; 010 011import static net.gdface.thrift.ThriftUtils.*; 012/** 013 * 有{@link com.facebook.swift.codec.ThriftStruct}æ³¨é‡Šçš„ç±»åž‹ä¹‹é—´çš„è½¬æ¢ 014 * @author guyadong 015 * 016 * @param <L> 017 * @param <R> 018 */ 019public class Swift2ThriftyStructTransformer<L,R extends Struct> implements Function<L,R>{ 020 private final ThriftStructMetadata leftMetadata; 021 private final ThriftyStructMetadata rightMetadata; 022 public Swift2ThriftyStructTransformer(Class<L> left, Class<R> right) { 023 this.leftMetadata = CATALOG.getThriftStructMetadata(checkNotNull(left,"left is null")); 024 this.rightMetadata = STRUCTS_CACHE.getUnchecked(checkNotNull(right,"right is null")); 025 } 026 @Override 027 public R apply(L input) { 028 if(null == input){ 029 return null; 030 } 031 Map<String, TypeValue> data = getFieldValues(input,leftMetadata); 032 return rightMetadata.constructStruct(data); 033 } 034 @Override 035 public String toString() { 036 StringBuilder builder = new StringBuilder() 037 .append("Swift2ThriftyStructTransformer [leftClass=") 038 .append(leftMetadata.getStructType()) 039 .append(", rightClass=") 040 .append(rightMetadata.getStructType()) 041 .append("]"); 042 return builder.toString(); 043 } 044}