Not much common to do so, but you can write it like this:
defguard has_cards(player)
when is_map_key(:cards, player) and :erlang.map_get(player, :cards) not in [[], nil]
defguard has_cards(player)
when is_struct(player, Player) and :erlang.map_get(player, :cards) not in [[], nil]