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.google.common.base.Throwables; 010import com.microsoft.thrifty.Struct; 011 012import static net.gdface.thrift.ThriftUtils.*; 013/** 014 * 有{@link com.facebook.swift.codec.ThriftStruct}æ³¨é‡Šçš„ç±»åž‹ä¹‹é—´çš„è½¬æ¢ 015 * @author guyadong 016 * 017 * @param <L> 018 * @param <R> 019 */ 020public class Thrifty2SwiftStructTransformer<L extends Struct,R> implements Function<L,R>{ 021 private final ThriftyStructMetadata leftMetadata; 022 private final ThriftStructMetadata rightMetadata; 023 public Thrifty2SwiftStructTransformer(Class<L> left, Class<R> right) { 024 this.leftMetadata = STRUCTS_CACHE.getUnchecked(checkNotNull(left,"right is null")); 025 this.rightMetadata = CATALOG.getThriftStructMetadata(checkNotNull(right,"left is null")); 026 } 027 @Override 028 public R apply(L input) { 029 if(null == input){ 030 return null; 031 } 032 try { 033 Map<String, TypeValue> data = leftMetadata.getFieldValues(input); 034 return constructStruct(data, rightMetadata); 035 } catch (Exception e) { 036 Throwables.throwIfUnchecked(e); 037 throw new RuntimeException(e); 038 } 039 } 040 @Override 041 public String toString() { 042 StringBuilder builder = new StringBuilder() 043 .append("Thrifty2SwiftStructTransformer [leftClass=") 044 .append(leftMetadata.getStructType()) 045 .append(", rightClass=") 046 .append(rightMetadata.getStructType()) 047 .append("]"); 048 return builder.toString(); 049 } 050}