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