class AzureBlob::Client

def signer

def signer
  @signer ||=
    begin
      no_access_key = access_key.nil? || access_key&.empty?
      using_managed_identities = no_access_key && !principal_id.nil? || use_managed_identities
      if !using_managed_identities && no_access_key
        raise AzureBlob::Error.new(
          "`access_key` cannot be empty. To use managed identities instead, pass a `principal_id` or set `use_managed_identities` to true."
        )
      end
      using_managed_identities ?
        AzureBlob::EntraIdSigner.new(account_name:, host:, principal_id:) :
        AzureBlob::SharedKeySigner.new(account_name:, access_key:, host:)
    end
end