Issue:
[FEATURE] Use empty enums instead of unit structs for PII masking strategies

### Feature Description

Currently, we make use of unit structs that implement the `masking::Strategy<T>` trait to represent PII masking strategies. We would like to replace these with empty enums instead (So `struct MyStrategy;` becomes `enum MyStrategy {}`).

The difference between the two is that you can still construct a value out of a unit struct, but you can never construct a value out of an empty enum (since it has no variants to construct). However, you can still use empty enums as type parameters to generic constructs like the `masking::Secret<Data, Strategy>` type.

The argument against this is that we wouldn't be able to construct a `dyn masking::Strategy<T>`, but ideally, owing to the current implementation of PII masking in Hyperswitch, we should never have the need to obtain a `dyn masking::Strategy<T>` trait object.

### Possible Implementation

For all unit structs that implement `masking::Strategy<T>`, convert them to unit enums.

### Have you spent some time checking if this feature request has been raised before?

- [X] I checked and didn't find a similar issue

### Have you read the Contributing Guidelines?

- [X] I have read the [Contributing Guidelines](https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md)

### Are you willing to submit a PR?

No, but I'm happy to collaborate on a PR with someone else

Resolution:
<think>
PR Context:
- Title: refactor(masking): use empty enums as masking:Strategy<T> types
- Merged: 2023-11-28T08:12:44Z
- Files changed: 4 files
- Commits: 2 commits

Implementation approach:
as per #1973

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [x] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
Use empty enums as strategy type parameter, instead of unit structs, to prevent instantiation. 


### Additional Changes

no


## Motivation and Context
#1973

## How did you test it?

`cargo clippy --all-features`

Assuming existing tests should catch s
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** refactor(masking): use empty enums as masking:Strategy<T> types (#2874)
Files to modify:


**crates/cards/src/validate.rs**
  Remove:
    - struct: pub::CardNumberStrategy
  Add:
    - enum: pub::CardNumberStrategy

**crates/common_utils/src/pii.rs**
  Remove:
    - struct: pub::PhoneNumberStrategy
    - struct: pub::EncryptionStratergy
    - struct: pub::ClientSecret
    - struct: pub::EmailStrategy
    - struct: pub::IpAddress
    - struct: pub::UpiVpaMaskingStrategy
  Add:
    - enum: pub::PhoneNumberStrategy
    - enum: pub::EncryptionStratergy
    - enum: pub::ClientSecret
    - enum: pub::EmailStrategy
    - enum: pub::IpAddress
    - enum: pub::UpiVpaMaskingStrategy

**crates/masking/src/secret.rs**
  Modify existing code

**crates/masking/src/strategy.rs**
  Remove:
    - struct: pub::WithType
    - struct: pub::WithoutType
  Add:
    - enum: pub::WithType
    - enum: pub::WithoutType