package com.airlock.iam.common.infrastructure.adapt;

import com.airlock.iam.base.misc.adapt.Adapter;
import com.airlock.iam.common.api.domain.model.user.PersistentUser;
import com.airlock.iam.common.domain.service.adapt.PersistentUserAdapter;

public final class PersistentUserAdapterImpl<T> implements PersistentUserAdapter<T> {
   private final Class<? extends T> otherClass;

   private PersistentUserAdapterImpl(Class<? extends T> otherClass) {
      this.otherClass = otherClass;
   }

   public static <T> PersistentUserAdapter<T> create(Class<? extends T> otherClass) {
      return new PersistentUserAdapterImpl<>(otherClass);
   }

   @Override
   public T to(PersistentUser user) {
      return Adapter.adapt(user).to((Class<T>)this.otherClass);
   }

   @Override
   public PersistentUser from(T object) {
      return Adapter.adapt(object).to(PersistentUser.class);
   }
}
