Issue:
Get Estimate for a plan price

**Request to Subscription Povider to get estimate**
curl --location '/api/v2/estimates/create_subscription_for_items' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic =' \
--data-urlencode 'billing_address%5Bline1%5D=PO Box 9999' \
--data-urlencode 'billing_address%5Bcity%5D=Walnut' \
--data-urlencode 'billing_address%5Bzip%5D=91789' \
--data-urlencode 'billing_address%5Bcountry%5D=US' \
--data-urlencode 'subscription_items%5Bitem_price_id%5D%5B0%5D=cbdemo_enterprise-suite-monthly'

**Response from Subscription Provider**
```
{
    "estimate": {
        "created_at": 1756113388,
        "object": "estimate",
        "subscription_estimate": {
            "status": "active",
            "next_billing_at": 1758791788,
            "object": "subscription_estimate",
            "currency_code": "INR"
        },
        "invoice_estimate": {
            "recurring": true,
            "date": 1756113388,
            "price_type": "tax_exclusive",
            "sub_total": 14100,
            "total": 14100,
            "credits_applied": 0,
            "amount_paid": 0,
            "amount_due": 14100,
            "object": "invoice_estimate",
            "customer_id": "16BaasUusKoPc107J",
            "line_items": [
                {
                    "id": "li_16BaasUusKoQ8107O",
                    "date_from": 1756113388,
                    "date_to": 1758791788,
                    "unit_amount": 14100,
                    "quantity": 1,
                    "amount": 14100,
                    "pricing_model": "flat_fee",
                    "is_taxed": false,
                    "tax_amount": 0,
                    "object": "line_item",
                    "customer_id": "16BaasUusKoPc107J",
                    "description": "Enterprise Suite Monthly",
                    "entity_type": "plan_item_price",
                    "entity_id": "cbdemo_enterprise-suite-monthly",
                    "discount_amount": 0,
                    "item_level_discount_amount": 0
                }
            ],
            "taxes": [],
            "line_item_taxes": [],
            "line_item_credits": [],
            "currency_code": "INR",
            "round_off_amount": 0,
            "line_item_discounts": []
        }
    }
}
```

Resolution:
<think>
PR Context:
- Title: feat(subscription): Add support to estimate for a subscription in chargebee
- Merged: 2025-09-24T16:58:56Z
- Files changed: 13 files
- Commits: 25 commits

Implementation approach:
## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [X] New feature
- [ ] Enhancement
- [ ] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
This pull request introduces support for fetching subscription estimates from Chargebee, alongside the existing subscription plans functionality. It adds new data structures, request/response types, and integration logic to handle the "Get Sub
</think>

To implement this, you'll need to modify:


**Detailed Implementation:**


**Commit 1:** feat(subscription): Add support to estimate for a subscription in chargebee (#9336)
Co-authored-by: 
Files to modify:


**crates/hyperswitch_connectors/src/connectors/chargebee.rs**
  Add:
    - function: private::get_headers
    - function: private::get_url
    - function: private::get_content_type
    - function: private::get_request_body
    - function: private::build_request
    - function: private::handle_response
    - function: private::get_error_response
    - impl: impl api::subscriptions::GetSubscriptionEstimateFlow for Chargebee
    - impl: impl ConnectorIntegration<
        GetSubscriptionEstimate,
        GetSubscriptionEstimateRequest,
        GetSubscriptionEstimateResponse,
    > for Chargebee

**crates/hyperswitch_connectors/src/connectors/chargebee/transformers.rs**
  Add:
    - function: private::try_from
    - function: private::try_from
    - struct: pub::ChargebeeSubscriptionEstimateRequest
    - struct: pub::SubscriptionEstimateResponse
    - struct: pub::ChargebeeEstimate
    - struct: pub::SubscriptionEstimate
    - struct: pub::InvoiceEstimate
    - struct: pub::LineItem
    - impl: impl TryFrom<ResponseRouterData<F, SubscriptionEstimateResponse, T, GetSubscriptionEstimateResponse>> for RouterData<F, T, GetSubscriptionEstimateResponse>
    - impl: impl TryFrom<&GetSubscriptionEstimateRouterData> for ChargebeeSubscriptionEstimateRequest

**crates/hyperswitch_connectors/src/connectors/recurly.rs**
  Add:
    - impl: impl api::subscriptions_v2::GetSubscriptionEstimateV2 for Recurly
    - impl: impl ConnectorIntegrationV2<
        GetSubscriptionEstimate,
        GetSubscriptionEstimateData,
        GetSubscriptionEstimateRequest,
        GetSubscriptionEstimateResponse,
    > for Recurly

**crates/hyperswitch_connectors/src/default_implementations.rs**
  Add:
    - impl: impl GetSubscriptionEstimateFlow for $connector
    - impl: impl ConnectorIntegration<
            GetSubscriptionEstimate,
            GetSubscriptionEstimateRequest,
            GetSubscriptionEstimateResponse
            > for $connector
    - impl: impl GetSubscriptionEstimateFlow for connectors::DummyConnector<T>
    - impl: impl ConnectorIntegration<
        GetSubscriptionEstimate,
        GetSubscriptionEstimateRequest,
        GetSubscriptionEstimateResponse,
    > for connectors::DummyConnector<T>

**crates/hyperswitch_domain_models/src/router_data_v2/flow_common_types.rs**
  Add:
    - struct: pub::GetSubscriptionEstimateData

**crates/hyperswitch_domain_models/src/router_flow_types/subscriptions.rs**
  Add:
    - struct: pub::GetSubscriptionEstimate

**crates/hyperswitch_domain_models/src/router_request_types/subscriptions.rs**
  Add:
    - struct: pub::GetSubscriptionEstimateRequest

**crates/hyperswitch_domain_models/src/router_response_types/subscriptions.rs**
  Add:
    - struct: pub::GetSubscriptionEstimateResponse
    - struct: pub::SubscriptionLineItem

**crates/hyperswitch_domain_models/src/types.rs**
  Modify existing code

**crates/hyperswitch_interfaces/src/api/subscriptions.rs**
  Add:
    - trait: pub::GetSubscriptionEstimateFlow
    - trait: pub::GetSubscriptionEstimateFlow

**crates/hyperswitch_interfaces/src/api/subscriptions_v2.rs**
  Add:
    - trait: private::GetSubscriptionEstimateV2

**crates/hyperswitch_interfaces/src/types.rs**
  Modify existing code

**crates/router/src/services/api.rs**
  Modify existing code